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.
<?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'], ]);
$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.
//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;
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
use Illuminate\Support\Str; protected function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->slug), ]); }
Đó 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') }}
//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);
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
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é.