Giới thiệu
Trong quá trình phát triển ứng dụng bước kiểm tra dữ liệu hợp lệ là rất cần thiết. Bài viết này sẽ giới thiệu một số cách tiếp cận khác nhau mà Laravel cung cấp để xác thực dữ liệu.
Validate trong Laravel
1. Simple request validate
Để làm điều này, chúng ta sẽ sử dụng validate phương thức do đối tượng Illuminate\Http\Request cung cấp
/**
* Store a new blog post.
*/
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|unique:posts',
'body' => ['required', 'max:255'],
]);
// The blog post is valid...
return redirect('/posts');
}
'title' => 'required|unique:posts'
Đối với field title ta sẽ kiểm tra 2 điều kiện các điều kiện cách nhau bởi ký tự |
- required – title phải tồn tại trong request gửi lên đồng thời không được để trống
- unique:posts – title nội dung của nó phải là duy nhất đối với bảng posts
'body' => ['required', 'max:255']
Đối với field body cũng sẽ kiểm tra 2 điều kiện các điều kiện được chỉ định trong 1 mảng.
- required – body phải tồn tại trong request gửi lên đồng thời không được để trống
- max:255 – Độ dài tối đa của body là 255 kí tự
Các quy tắc xác thực có thể được chỉ định dưới dạng các mảng hoặc một chuỗi được phân tách bới ký tự | như ví dụ trên.
2. Custom validate
Nếu bạn không muốn sử dụng validate phương thức theo yêu cầu, bạn có thể tạo một phiên bản trình xác thực theo cách thủ công bằng cách sử dụng Validator. Bạn có thể quyết định khi có lỗi thì làm gì tiếp theo như ví dụ bên dưới.
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')->withErrors($validator)->withInput();
}
// Store the blog post...
}
Trường hợp bạn muốn sử dụng xác thực theo cách thủ công nhưng vẫn tận dụng lợi thế automatic redirection của validate
Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
])->validate();
3. Form Request Validation
Đối với các tình huống xác thực phức tạp hơn, bạn có thể muốn tạo một “form request”. Form requests là các lớp yêu cầu tùy chỉnh đóng gói logic xác thực và ủy quyền của riêng chúng. Để tạo một form request class, bạn có thể sử dụng make:request
php artisan make:request StorePostRequest
Command trên sẽ tạo cho ta class StorePostRequest nằm trong folder app\Http\Requests, bên dưới là chi tiết file StorePostRequest.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StorePostRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
- authorize phương thức chịu trách nhiệm xác định xem người dùng hiện được xác thực có thể thực hiện hành động được yêu cầu hay không
rules
phương thức return các quy tắc xác thực sẽ áp dụng cho dữ liệu của yêu cầu
Ta sẽ copy phần validate ở trên vào đây
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
Function Store ở Controller ta sẽ sửa lại như sau.
public function store(StorePostRequest $request)
{
// Store the blog post...
}
Với phường pháp xác thực này code của chúng ta sẽ dễ quản lý hơn.
Tham khảo: https://laravel.com/docs/10.x/validation#form-request-validation
Cảm ơn tất cả mọi người đã đọc.