การตรวจสอบความถูกต้องของข้อมูลใน 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 ของคุณเร็วขึ้นด้วยบริการโฮสต์แอปพลิเคชันของ Kinsta