[Laravel] Validation

Bài viết tổng hợp 1 vài note khi dùng validate với Laravel

1. AJAX Requests & Validation

Khi bạn sử dụng validate cho AJAX, Laravel sẽ không sinh ra 1 đường chuyển hướng khi response. Thay vào đó, Laravel sẽ sinh ra 1 JSON response chưa tất cả các lỗi với mã HTTP code là 422

2. Validation Quickstart (chắc không dùng nên tạm bỏ qua)

3. Form Request Validation

3.1. Tạo Form Requests

1
php artisan make:request StoreBlogPost

Vậy các các rules của validation được thực thi như thế nào? Tất cả thứ bạn cần là truyền request vào phương thức trong controller của bạn. Form request đến đã được validated trước khi method trong controller được gọi, điều đó có nghĩa bạn không cần lẫn phần validation logic trong controller của bạn

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* Store the incoming blog post.
*
* @param StoreBlogPost $request
* @return Response
*/
public function store(StoreBlogPost $request)
{
// The incoming request is valid...

// Retrieve the validated input data...
$validated = $request->validated();
}

Nếu validation lỗi, 1 response chuyển hướng sẽ được tạo ra vào trang trước đó, lỗi sẽ được flashed vào session và bạn có thể hiển thị nó. Nếu request là 1 AJAX request, 1 kiểu response JSON sẽ được trả về chứa các mã lỗi với mã 422

3.2. Adding After Hooks To Form Requests

Nếu bạn muốn thêm 1 “after” hook tới 1 form request, bạn nên sử dụng withValidator method. Method này sẽ nhận cấu trức validator đầy đủ, cho phép bạn gọi 1 vài phương thức của chính nó trước khi các rules của validation thực sự được thực thi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
}

3.3. Xử lý dữ liệu trước khi validate

1
2
3
4
5
6
protected function prepareForValidation()
{
$this->merge([
'username' => 'Minh',
]);
}
Author

Ming

Posted on

2019-11-23

Updated on

2021-04-10

Licensed under

Comments