8. Tạo trình validation thủ công (ok)
https://viblo.asia/p/tap-20-validation-laravel-GrLZDWAEKk0
Nếu bạn không muốn sử dụng method validate
của request, bạn có thể tạo một trình validation thủ công sử dụng Validator
facade. Với method make
trên facade, nó sẽ tạo một lớp validator.
Chẳng hạn:
Tại method Validator::make
:
Tham số đầu tiên là mảng các request cần validate.
Tham số thứ hai là mảng validation rule.
Khác với method validate
thì Validator::make
chỉ thực hiện validation nhưng không tự động tạo response để trả về cho người dùng. Vì vậy chúng ta sẽ phải tự khai báo thủ công. Để kiểm tra trạng thái validation ta sử dụng method fails
từ object trả về của Validator::make
. Từ đó ta thực hiện khởi tạo response, bạn có thể sử dụng hai cách để trả về response:
Redirect response
Cách này sử dụng khi gửi request qua form truyền thống. Chúng ta có thể sử dụng method
withErrors
với tham số là$validator
để flash các thông báo lỗi tới$errors
của blade template. Ngoài ra bạn cũng có thể truyền một objectMessageBag
hoặc PHP array vào methodwithErrors
.Bạn có thể thêm method
withInput
phía sau để flash input.JSON response
Nếu ứng dụng của bạn gửi bằng AJAX thì có thể sử dụng cách này, nhưng ở đây, để lấy các thông báo lỗi từ
$validtor
, ta phải sử dụng methoderrors
.
Bây giờ bạn có thể áp dụng nó cho ví dụ ở trên. Mình sẽ thử gửi request với AJAX nhé.
Với blade view create_post
thì mình sẽ lấy lại đoạn code phần AJAX request & validation.
Tại method store
trong controller App\Http\Controllers\PostController
các bạn code như sau:
Và đây là kết quả chúng ta thu được:
Ví dụ đã hoàn thành:
C:\xampp\htdocs\blog\routes\web.php
C:\xampp\htdocs\blog\app\Http\Controllers\PostController.php
C:\xampp\htdocs\blog\app\Http\Requests\StorePost.php
C:\xampp\htdocs\blog\resources\views\create_post.blade.php
1. Tự động chuyển hướng (Automatic redirection)
Nếu như bạn đang khởi tạo một validator thủ công nhưng vẫn muốn sử dụng lợi ích tự động chuyển hướng hoặc trả về JSON response của method validate
thì có thể kết nối thêm method validate
sau lớp khởi tạo trả về từ Validator::make
.
2. Đặt tên cho các "túi" lỗi (Named error bags)
Nếu như bạn có nhiều form trên một trang đơn, bạn sẽ muốn đặt tên cho từng lỗi của một form nhất định, từ đó giúp bạn dễ dàng lấy nó từ blade template. Để làm việc này rất đơn giản, bạn chỉ cần việc truyền tham số thứ hai là tên mà bạn cần đặt cho "túi" lỗi tại method withErrors
.
Bạn có thể truy cập "túi" lỗi ấy tại blade view như sau:
Về một số method để thao tác với "túi" lỗi, mình sẽ ói ở phần bên dưới.
3. After validation hook
Validator cũng cho phép chúng ta thêm after validation hook, bạn cần thực hiện theo thứ sau để có thể hoạt động nó:
Last updated