การตรวจสอบความถูกต้องของข้อมูลใน Laravel: สะดวกและมีประสิทธิภาพ

เผยแพร่แล้ว: 2023-05-03

ยิ่งกว่าที่เคย ข้อมูลในแอปพลิเคชันของคุณถูกต้อง แม่นยำ และตรงตามข้อกำหนดของระบบทั้งหมดมีความสำคัญมากกว่าที่เคย ระบุถึงความจำเป็นในการรักษาความสอดคล้องของข้อมูลและหลีกเลี่ยงช่องโหว่ด้านความปลอดภัย

Laravel ทำให้การตรวจสอบข้อมูลเป็นเรื่องง่ายและเข้าใจได้ง่าย เป็นไปตามสถาปัตยกรรม Model View Controller (MVC) และต้องการเพียงความรู้ทั่วไปเกี่ยวกับ PHP และแนวคิดการเขียนโปรแกรมเชิงวัตถุ (OOP) นอกจากนี้ Laravel ยังมีวิธีการตรวจสอบความถูกต้องของข้อมูลขาเข้าหลายวิธี

สำรวจวิธีการเหล่านี้บางส่วนและวิธีใช้กฎการตรวจสอบกับชุดข้อมูลของคุณ

การตรวจสอบความถูกต้องของข้อมูลทำได้ง่ายใน Laravel

Laravel มีกฎการตรวจสอบที่พร้อมใช้งานหลายข้อเมื่อผู้ใช้แอปพลิเคชันของคุณส่งข้อมูลผ่านแบบฟอร์ม คุณสามารถทำเครื่องหมายฟิลด์อินพุตตามที่จำเป็น กำหนดความยาวขั้นต่ำหรือสูงสุด และกำหนดให้รายการไม่ซ้ำกัน (ไม่ซ้ำกัน) และที่อยู่อีเมลที่ถูกต้อง ตัวตรวจสอบความถูกต้องของ Laravel จะตรวจสอบว่าอินพุตเป็นไปตามกฎเหล่านี้หรือกฎอื่นๆ ที่คุณระบุหรือไม่

กฎการตรวจสอบ Laravel เหล่านี้รวมถึง:

  • required — ข้อมูลในฟิลด์ต้องไม่เป็นโมฆะหรือว่างเปล่า
  • array — ข้อมูลฟิลด์ต้องเป็นอาร์เรย์ PHP
  • bail — กฎการตรวจสอบจะหยุดทำงานหลังจากที่พบความล้มเหลวในการตรวจสอบครั้งแรก
  • email — ข้อมูลในฟิลด์ต้องเป็นที่อยู่อีเมลที่ถูกต้อง
  • unique — ข้อมูลฟิลด์ต้องไม่มีข้อมูลซ้ำในตารางฐานข้อมูล

วิธีการตรวจสอบทั้งหมดมีข้อดีและข้อเสีย แต่ความหลากหลายจะช่วยให้คุณเลือกแนวทางที่ดีที่สุดสำหรับความต้องการของคุณได้ ขึ้นอยู่กับวิธีการที่คุณเลือก การตรวจสอบความถูกต้องของ Laravel อาจเกิดขึ้นได้หลายวิธี โดยมีข้อความแสดงข้อผิดพลาดด้วยตนเองหรือโดยอัตโนมัติ

วิธีการทั่วไปคือ code>validate ซึ่งใช้สำหรับคำขอ HTTP ที่เข้ามา เมธอดนี้เชื่อมโยงกับข้อมูลคำขอ ดำเนินการตามกฎการตรวจสอบ คุณสามารถคั่นกฎสำหรับแต่ละฟิลด์ด้วยเครื่องหมายจุลภาค ดังตัวอย่างด้านล่าง

 use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }

ที่นี่ email เป็นอินพุตที่จำเป็น หมายความว่าอีเมลไม่สามารถเป็นโมฆะได้ นอกจากนี้ จะต้องไม่ซ้ำกันในตารางฐานข้อมูล users ให้แน่ใจว่าไม่ได้ลงทะเบียนที่อยู่อีเมลเดียวกันซ้ำสองครั้ง กฎข้อสุดท้ายกำหนดว่าที่อยู่อีเมลจะต้องถูกต้องด้วย มิฉะนั้น กระบวนการตรวจสอบจะสิ้นสุดลง ต้องระบุฟิลด์ชื่อ แต่ไม่มีกฎอื่นๆ

หากกฎการตรวจสอบความถูกต้องของ Laravel ล้มเหลว การตอบกลับจะถูกสร้างขึ้นโดยอัตโนมัติ

อย่าปล่อยให้ข้อผิดพลาดข้อมูลเดียวทำลายการทำงานหนักของคุณ! ตรวจสอบข้อมูลของคุณและทำให้โครงการของคุณปลอดภัย ️ คลิกเพื่อทวีต

พื้นฐานการตรวจสอบ

เพื่อทำความเข้าใจวิธีการตรวจสอบให้ดียิ่งขึ้น ให้พิจารณาตัวอย่างต่อไปนี้ คุณจะกำหนดเส้นทางสำหรับปลายทางและสร้างตัวควบคุมเพื่อตรวจสอบความถูกต้องและประมวลผลข้อมูลคำขอ

ขั้นแรก สร้างจุดสิ้นสุดอย่างง่ายที่อนุญาตให้ผู้ใช้จัดเก็บอีเมลและรหัสผ่านของตน

กำหนดเส้นทาง

เส้นทาง Laravel ถูกกำหนดในไฟล์ route/web.php สำหรับเว็บแอปพลิเคชันหรือ route/api.php สำหรับ API สำหรับตัวอย่างนี้ ใช้ api.php :

 use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);

สร้างตัวควบคุม

รันคำสั่ง Artisan นี้เพื่อสร้างคอนโทรลเลอร์:

 php artisan make:controller UserController

คำสั่งนี้สร้างไฟล์ UserController.php ในไดเร็กทอรี app/Http/Controllers

ตอนนี้ กำหนดวิธี store เพื่อตรวจสอบข้อมูลที่ป้อนจุดสิ้นสุดของร้านค้าก่อนที่จะจัดเก็บ

ตัวอย่างนี้จะตรวจสอบฟิลด์ต่อไปนี้โดยใช้กฎเหล่านี้:

  • อีเมล — ควรเป็นอีเมลที่ไม่ซ้ำใคร เป็นอีเมลที่ถูกต้อง และต้องจำเป็น
  • รหัสผ่าน — ควรมีความยาวขั้นต่ำ การยืนยันรหัสผ่าน และต้องจำเป็น
  • อายุ — ต้องเป็นตัวเลขและจำเป็นต้องกรอก
 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store new user details. * */ public function store(Request $request){ $validated = $request->validate([ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); // After user data is validated, logic to store the data } }

กฎ confirmed อนุญาตให้คุณกำหนดฟิลด์เฉพาะสองครั้งเพื่อตรวจสอบว่าข้อมูลถูกต้อง เช่น ผู้ใช้ป้อนรหัสผ่านซ้ำระหว่างการลงทะเบียน กฎนี้กำหนดให้มีฟิลด์ชื่อ password_confirmation ซึ่งข้อมูลต้องตรงกับฟิลด์ รหัสผ่าน

แสดงข้อความแสดงข้อผิดพลาด

หากตรงตามเกณฑ์การตรวจสอบ รหัสของคุณจะทำงานต่อไปตามปกติ หากการตรวจสอบล้มเหลว ข้อยกเว้น IlluminateValidationValidationException จะถูกส่งออก และส่งคืนการตอบสนองข้อผิดพลาดที่เหมาะสม

ตัวอย่างอิงจาก API ซึ่งส่งคืนการตอบสนอง HTTP 422 Unprocessable Entity ในรูปแบบ JSON สำหรับเว็บแอปพลิเคชัน มันจะเปลี่ยนเส้นทางไปยัง URL ก่อนหน้าเพื่อแสดงข้อความแสดงข้อผิดพลาด และข้อมูลคำขอจะกระพริบไปยังเซสชัน

คุณสามารถใช้ตัวแปร $errors ในมุมมองของคุณเพื่อแสดงข้อผิดพลาดที่ส่งคืน:

 @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif

คุณยังสามารถเลือกที่จะดูเฉพาะข้อผิดพลาดแรกหรือวนซ้ำเพื่อดูทั้งหมด

 // Fetch all errors $errors->all() // Fetch only the first error $errors->first()

กรอกแบบฟอร์ม

การใส่แบบฟอร์มใหม่ช่วยให้ผู้ใช้ไม่ต้องพิมพ์ข้อมูลซ้ำ เพื่อให้พวกเขาสามารถมุ่งเน้นที่การแก้ไขข้อผิดพลาดได้ ในตัวอย่างที่อยู่อีเมลล้มเหลว คุณสามารถเติมข้อมูลส่วนที่เหลือของแบบฟอร์มใหม่ได้โดยการเรียกค่าเก่าสำหรับฟิลด์ name

 $name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">

กฎนี้จะส่งคืน null หากไม่มีอินพุตก่อนหน้า

การตรวจสอบขั้นสูง

Laravel จัดเตรียมวิธีอื่นในการเขียนการตรวจสอบที่เรียกว่าคำขอแบบฟอร์ม คำขอแบบฟอร์มคือคลาสคำขอแบบกำหนดเองที่จัดระเบียบการตรวจสอบและแยกตัวควบคุมของคุณออก

มีตรรกะการตรวจสอบความถูกต้องและการให้สิทธิ์ของตนเอง ซึ่งเหมาะสำหรับปริมาณอินพุตขนาดใหญ่ และสามารถใช้กำหนดกฎการตรวจสอบและปรับแต่งข้อความแสดงข้อผิดพลาดได้

หากต้องการสร้างคำขอแบบฟอร์ม ให้รันคำสั่ง Artisan นี้:

 php artisan make:request StoreUserRequest

คำสั่งนี้สร้างไฟล์ StoreUserRequest.php ในไดเร็กทอรี app/Http/Requests และมีสองวิธีเริ่มต้น:

  • rules ส่งคืนกฎการตรวจสอบสำหรับข้อมูลคำขอ
  • authorize คืนบูลีนเพื่อระบุว่าผู้ใช้นั้นมีสิทธิ์ในการดำเนินการตามที่ร้องขอหรือไม่

แปลงตัวอย่างก่อนหน้าเพื่อใช้คำขอแบบฟอร์ม

 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { // Add logic to check if the user is authorized to submit this data. return true; } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules() { return [ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]; } }

เมื่อต้องการปรับแต่งข้อความแสดงข้อผิดพลาดของกฎเหล่านี้ คุณอาจแทนที่เมธอดข้อความในคลาส FormRequest

 /** * Get the error messages for the defined validation rules. * * @return array */ public function messages() { return [ 'email.required' => 'An email address is required', 'email.email' => 'The email address must be valid', 'password.confirmed'=>'Re-type your password as password_confirmation, passwords does not match' ]; }

หมายเหตุ: ชื่อข้อมูลและกฎการตรวจสอบจะถูกคั่นด้วยจุด (.) ก่อนข้อมูลข้อความ

การตรวจสอบที่กำหนดเอง

หากต้องการสร้างการตรวจสอบที่กำหนดเอง คุณสามารถใช้ส่วนหน้าของ Validator แทน validate อินสแตนซ์ตัวตรวจสอบประกอบด้วยสองอาร์กิวเมนต์: ข้อมูลที่จะตรวจสอบและอาร์เรย์ของกฎการตรวจสอบ อาร์กิวเมนต์ทั้งสองนี้จะถูกส่งผ่านไปยังเมธอด ::make บนส่วนหน้าของเครื่องมือตรวจสอบความถูกต้อง ซึ่งสร้างอินสแตนซ์ของเครื่องมือตรวจสอบความถูกต้องใหม่

 use Illuminate\Http\Request; public function store (Request $request){ $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); if ($validator->fails()) { // Return errors or redirect back with errors return $validator->errors(); } // Retrieve the validated input... $validated = $validator->validated(); // Continue logic to store the data }

หากคุณต้องการเพิ่ม Direct อัตโนมัติ คุณสามารถดำเนิน validate กับอินสแตนซ์ตัวตรวจสอบความถูกต้องที่มีอยู่ก่อน หากการตรวจสอบล้มเหลว คำขอ XHR จะสร้างการตอบสนอง JSON ที่มี 422 Unprocessable Entity เป็นรหัสสถานะ มิฉะนั้นผู้ใช้จะถูกเปลี่ยนเส้นทางทันที

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();

คุณยังสามารถปรับแต่งข้อความแสดงข้อผิดพลาดของคุณโดยส่งอาร์กิวเมนต์ที่สามที่เรียกว่า messages ไปยัง Validate::make method :

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ], $messages = [ 'required' => 'The :attribute field is required.', ]);

หมายเหตุ: :attribute จะถูกแทนที่ด้วยชื่อของฟิลด์ภายใต้การตรวจสอบความถูกต้อง

การทำงานกับข้อมูลจำนวนมากอาจควบคุมไม่ได้อย่างรวดเร็ว ปกป้องโครงการของคุณ (และสติของคุณ!) ด้วยการตรวจสอบความถูกต้องของ Laravel นี่คือวิธีการ คลิกเพื่อทวีต

สรุป

การตรวจสอบความถูกต้องของข้อมูลเป็นสิ่งสำคัญสำหรับการรักษาชุดข้อมูลของคุณให้สะอาด ถูกต้อง และสมบูรณ์ การตรวจสอบข้อมูลทำให้คุณสามารถขจัดข้อผิดพลาดในข้อมูลของคุณที่อาจสร้างความเสียหายหรือส่งผลกระทบต่อโครงการของคุณ การตรวจสอบความถูกต้องมีความสำคัญมากขึ้นเมื่อทำงานในปริมาณมากและมีข้อมูลจำนวนมาก

Laravel เปิดใช้งานวิธีการที่ยืดหยุ่นมากมายเพื่อรับรองความสมบูรณ์และความถูกต้องของข้อมูลที่ผ่านแอปพลิเคชันของคุณ คุณสามารถบรรลุตรรกะการตรวจสอบที่ซับซ้อนได้ด้วยวิธีการเริ่มต้นและปรับแต่งได้ ทำให้โค้ดเบสของคุณมีโครงสร้างที่ดีและนำมาใช้ใหม่ได้ง่ายขึ้น

ส่งแอป Laravel ของคุณเร็วขึ้นด้วยบริการโฮสต์แอปพลิเคชันของ Kinsta