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é.