Validating Laravel requests sử dụng rule objects Chuyên mục PHP và Laravel 2023-08-02 433 Lượt xem 97 Lượt thích 0 Bình luận

Laravel có vô số cách để validate các tham số request. Chẳng hạn, bạn có thể sử dụng phương thức validate của Illuminate\Http\Request nơi bạn có thể chỉ định tất cả các trường mà bạn muốn validate bên trong action của controller’s. Bạn có thể làm như này.
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* Store a new blog post.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$validatedData = $request->validate([
'title' => ['required' | 'unique:posts' | 'max:255'],
'body' => ['required'],
'author.name' => ['required'],
]);
// The blog post is valid...
}
}
Như được hiển thị ở trên, bạn có thể chỉ định các quy tắc validate được xác định trước (được phân tách bằng dấu gạch ngang [|]) trên các tham số request. Ngoài các quy tắc validate được xác định trước này, bạn cũng có thể xác định quy tắc của riêng mình bằng cách sử dụng “rule objects”.
Custom Rule Objects
Các Rule objects về cơ bản là các lớp triển khai Illuminate\Contracts\Validation\Rule interface. Một rule object chứa hai phương thức: pass và message. Phương thức pass nhận giá trị và tên thuộc tính và sẽ trả về true hoặc false tùy thuộc vào việc giá trị thuộc tính có hợp lệ hay không. Phương thức message sẽ trả về message lỗi validation sẽ được sử dụng khi xác thực không thành công.
Các đối tượng quy tắc có thể được tạo bằng lệnh make:rule Artisan như này.
php artisan make:rule Titlecase
Thao tác này sẽ tạo rule object Titlecase trong thư mục app/Rules. Đây là cách một rule object điển hình trông như thế nào.
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Titlecase implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return ucwords($value) === $value;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Each word in :attribute must begin with a capital letter';
}
}
Sau khi rule object đã được xác định, bạn có thể đính kèm nó vào trình xác thực bằng cách chuyển một instance của rule object với các validation rules khác của bạn như này.
use App\Rules\Titlecase;
$request->validate([
'name' => ['required', 'string', new Titlecase],
]);
Và đó là cách bạn có thể triển khai các rule object tùy chỉnh của riêng mình để validates requests theo nhu cầu của bạn.
Mình cung cấp thêm !
Có các thư viện như axiom cung cấp một tập hợp các rule object validation hữu ích và có thể tái sử dụng của Laravel chẳng hạn như StrongPassword, TelephoneNumber, MaxWords, v.v. Vì vậy, bạn không cần phải làm việc vô ích cho các quy tắc validation chung!
Bình luận (0)