😆Tạo trình validation thủ công (Manually creating validator) Phần 2 (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.

use Illuminate\Support\Facades\Validator;
public function store(Request $request) { 
    $validator = Validator::make($input, $rules);
    if ($validator->fails()) {
        // Khởi tạo response thủ công
    }
}

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:

  1. 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 object MessageBag hoặc PHP array vào method withErrors.

    return back()->withErrors($validator);

    Bạn có thể thêm method withInput phía sau để flash input.

    return back()->withErrors($validator)->withInput();
  2. 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 method errors.

    return response()->json($validator->errors(), 422);

C:\xampp8\htdocs\oec\routes\web.php

C:\xampp8\htdocs\plugindev\app\Http\Controllers\PostController.php

C:\xampp8\htdocs\oec\resources\views\posts\create.blade.php

Tùy chỉnh thông báo lỗi (Customizing error message)

C:\xampp8\htdocs\oec\app\Http\Controllers\PostController.php

Trong ví dụ trên, từ khóa :attribute sẽ được thay thế bằng tên thực của input trong validation. Ngoài ra còn có một số từ khóa khác tương ứng với mỗi rule, bạn có thể mở file resources/lang/en/validation.php để tham khảo. Chẳng hạn:

C:\xampp8\htdocs\oec\lang\en\validation.php

Chỉ định một thông báo tùy chỉnh cho một thuộc tính nhất định (Specifying a custom message for a given field)

Chỉ định thông báo tùy chỉnh trong tệp ngôn ngữ (Specifying custom message in language file)

Nếu ứng dụng của bạn có nhiều validator có cùng chung một thông báo tùy chỉnh, nhưng việc khai báo ở từng chỗ như vây sẽ rất tốn thời gian và cực kỳ khó khăn trong việc thay đổi. Bạn có thể khai báo các thông báo tùy chỉnh của mình trong file resources/lang/xx/validation.php tại mảng custom.

C:\xampp8\htdocs\oec\app\Http\Controllers\PostController.php

C:\xampp8\htdocs\oec\lang\en\validation.php

C:\xampp8\htdocs\oec\config\app.php

C:\xampp8\htdocs\oec\lang\vi\validation.php

C:\xampp8\htdocs\oec\lang\en\validation.php

Chỉ định giá trị tùy chỉnh trong tệp ngôn ngữ (Specifying custom value in language file)

C:\xampp8\htdocs\oec\routes\web.php

C:\xampp8\htdocs\oec\app\Http\Controllers\PostController.php

C:\xampp8\htdocs\oec\lang\en\validation.php

Kết quả:

Last updated

Was this helpful?