Validate trong laravel
1. Validate là gì?
Validate là việc xác thực dữ liệu đầu vào để tránh gây sai dữ liệu, gây dữ liệu thiếu logic hay dữ liệu rác. Validate trong laravel thì khác hơn, laravel sử dụng cơ chế validate bằng những yêu cầu của HTTP requests.
2. Cách sử dụng Validate trong laravel 6
2.1 Cấu trúc cơ bản
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class PostController extends Controller { public function store(Request $request) { $validatedData = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); //pass validate code } } //hoặc có thể sử dụng mảng như sau: $validatedData = $request->validate([ 'title' => ['required', 'unique:posts', 'max:255'], 'body' => ['required'], ]);
2.2 Dừng kiểm tra xác thực khi có một lỗi xác thực
$request->validate([ 'title' => 'bail|required|unique:posts|max:255', 'body' => 'required', ]);
Bạn sử dụng bail để làm điều này. Như ở trên nếu required đưa ra lỗi xác thực là fail thì những kiểm tra sau unique, max sẽ không được thực hiện.
2.3 Form Request Validate
//tạo request php artisan make:request StoreBlogPost //sau khi tạo sẽ nằm ở App\Http\Requests //Bạn viết những validate trong hàm rules public function rules() { return [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]; } //lưu ý để sử dụng được thì bạn phải bật true ở hàm authorize public function authorize() { return true; } //Khi gọi thì bạn truyền classname của request và gọi validate từ request public function store(StoreBlogPost $request) { //pass validate code } //một lưu ý nữa để sử dụng nó bạn phải khai báo sử dụng nó use App\Http\Requests\StoreBlogPost;
2.4 Tùy chỉnh thông báo lỗi
Bạn ghi đè lại phương thức messages của request bạn tạo.
public function messages() { return [ 'title.required' => 'A title is required', 'body.required' => 'A message is required', ]; }
//sử dụng thông báo lỗi <form method="post" action="{{asset('testPath')}}"> {{csrf_field()}} <input type="text" name="title"> <input type="text" name="body"> <input type="submit" name="submit"> @if ($errors->any()) @error('title') {{$message}} @enderror @error('body') {{$message}} @enderror @endif </form> //hoặc @if ($errors->any()) @foreach ($errors->all() as $error) {{ $error }} @endforeach @endif
2.5 Chỉnh sửa đầu vào trước khi validate
use Illuminate\Support\Str; protected function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->slug), ]); }
2.6 Cách khác sử dụng validate
Đó là sử dụng Validator.
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; class PostController extends Controller { 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(); } } } //Bạn có thể đặt tên cho thùng chứa lỗi(chẳng qua là biến ghi thông tin lỗi) chuyển về view như sau: return redirect('register') ->withErrors($validator, 'login'); //Bên view sử dụng {{ $errors->login->first('email') }}
2.6 Làm việc với thông báo lỗi
//truy xuất một phần tử $errors = $validator->errors(); echo $errors->first('email'); //truy xuất nhiều phần tử foreach ($errors->get('email') as $message) { // } //lấy tất cả thông báo lỗi foreach ($errors->all() as $message) { // } //kiểm tra có lỗi nào đó không if ($errors->has('email')) { // } .//tùy chỉnh thông báo lỗi thông qua tham số thứ ba $messages = [ 'required' => 'The :attribute field is required.', ]; $validator = Validator::make($input, $rules, $messages);
2.7 Các validate có sẵn của laravel
Các validate hay dùng. Cái này mình sưu tầm của toidicode: https://toidicode.com/validation-trong-laravel-44.html
Kết Luận
Như vậy bạn đã trải qua được validate trong laravel 6. Như mình đã nói ở các bài viết trước, bạn chỉ nên nhớ và sử dụng 1 cách thôi là đủ rồi, vì mỗi cách đều cho hiệu quả giống nhau, với mình thì mình chọn thông qua Requests, bởi vì request có thể sử dụng cho nhiều cái nữa ví dụ như session, do đó dễ nhớ và tiện cho mình sử dụng hơn. Cảm ơn bạn đã đọc bài viết này. Bài viết sau mình sẽ hướng dẫn Authentication trong Laravel bạn cùng xem nhé.