Gói này có thể tự động giải quyết một đối tượng
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
7 từ các giá trị này bằng cách sử dụng lớp class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
7 mà chúng ta đã thấy trong chương trướcclass SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
Bây giờ bạn có thể đưa lớp
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
7 vào bộ điều khiển của mình. Nó sẽ được lấp đầy với các giá trị được tìm thấy trong yêu cầuclass SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
##Sử dụng xác thực
Khi tạo một đối tượng dữ liệu từ một yêu cầu, gói cũng có thể xác thực các giá trị từ yêu cầu sẽ được sử dụng để xây dựng đối tượng dữ liệu
Có thể thêm các quy tắc làm thuộc tính cho các thuộc tính của đối tượng dữ liệu
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
Khi bạn cung cấp cho một nghệ sĩ độ dài hơn 20 ký tự, quá trình xác thực sẽ không thành công giống như khi bạn tạo một lớp yêu cầu tùy chỉnh cho điểm cuối
Bạn có thể tìm thấy danh sách đầy đủ các quy tắc có sẵn tại đây
Một thuộc tính đặc biệt là thuộc tính
// using an array
#[Rule[['required', 'string']]]
public string $property
// using a string
#[Rule['required|string']]
public string $property
// using multiple arguments
#[Rule['required', 'string']]
public string $property
0. Với nó, bạn có thể viết các quy tắc giống như khi tạo một yêu cầu Laravel tùy chỉnh// using an array
#[Rule[['required', 'string']]]
public string $property
// using a string
#[Rule['required|string']]
public string $property
// using multiple arguments
#[Rule['required', 'string']]
public string $property
Cũng có thể viết các quy tắc trong một phương thức chuyên dụng trên đối tượng dữ liệu. Điều này có thể hữu ích khi bạn muốn xây dựng một đối tượng quy tắc tùy chỉnh không thể thực hiện được với các thuộc tính
________số 8Thậm chí có thể sử dụng các đối tượng validationAttribute trong phương thức
// using an array
#[Rule[['required', 'string']]]
public string $property
// using a string
#[Rule['required|string']]
public string $property
// using multiple arguments
#[Rule['required', 'string']]
public string $property
1class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
0Các quy tắc được xác định trong phương thức
// using an array
#[Rule[['required', 'string']]]
public string $property
// using a string
#[Rule['required|string']]
public string $property
// using multiple arguments
#[Rule['required', 'string']]
public string $property
1 sẽ luôn ghi đè lên các quy tắc được tạo tự độngBạn thậm chí có thể thêm các phụ thuộc để được tự động đưa vào
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
2Ngoài ra, nếu bạn cần truy cập tải trọng dữ liệu, bạn có thể sử dụng tham số
// using an array
#[Rule[['required', 'string']]]
public string $property
// using a string
#[Rule['required|string']]
public string $property
// using multiple arguments
#[Rule['required', 'string']]
public string $property
3class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
4##Ánh xạ một yêu cầu vào một đối tượng dữ liệu
Theo mặc định, gói sẽ thực hiện ánh xạ 1-1 từ yêu cầu đến đối tượng dữ liệu, điều đó có nghĩa là đối với mỗi thuộc tính trong đối tượng dữ liệu, một giá trị có cùng khóa sẽ được tìm kiếm trong các giá trị yêu cầu
Nếu bạn muốn tùy chỉnh ánh xạ này, thì bạn luôn có thể thêm một phương thức tạo ma thuật như thế này
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
5## Lấy đối tượng dữ liệu chứa đầy dữ liệu yêu cầu từ mọi nơi
Bạn có thể giải quyết một đối tượng dữ liệu từ vùng chứa
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
0Chúng tôi giải quyết một đối tượng dữ liệu từ vùng chứa, tất cả các thuộc tính của nó sẽ được lấp đầy bởi các giá trị của yêu cầu với các tên khóa phù hợp. Nếu yêu cầu chứa dữ liệu không tương thích với đối tượng dữ liệu, một ngoại lệ xác thực sẽ được đưa ra
##Tự động suy ra quy tắc cho thuộc tính
Vì chúng tôi có các đối tượng dữ liệu được gõ mạnh như vậy, nên chúng tôi có thể suy ra một số quy tắc xác thực từ chúng. Trình suy luận quy tắc sẽ lấy thông tin về loại thuộc tính và sẽ tạo quy tắc xác thực từ thông tin đó
Trình suy luận quy tắc được định cấu hình trong tệp cấu hình
// using an array
#[Rule[['required', 'string']]]
public string $property
// using a string
#[Rule['required|string']]
public string $property
// using multiple arguments
#[Rule['required', 'string']]
public string $property
4class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
1Theo mặc định, bốn trình suy luận quy tắc được bật
- Đôi khiRuleInferrer sẽ thêm quy tắc
5 khi thuộc tính là tùy chọn// using an array #[Rule[['required', 'string']]] public string $property // using a string #[Rule['required|string']] public string $property // using multiple arguments #[Rule['required', 'string']] public string $property
- NullableRuleInferrer sẽ thêm quy tắc
6 khi thuộc tính có thể vô hiệu hóa// using an array #[Rule[['required', 'string']]] public string $property // using a string #[Rule['required|string']] public string $property // using multiple arguments #[Rule['required', 'string']] public string $property
- Bắt buộcRuleInferrer sẽ thêm quy tắc
7 khi thuộc tính không thể vô hiệu hóa// using an array #[Rule[['required', 'string']]] public string $property // using a string #[Rule['required|string']] public string $property // using multiple arguments #[Rule['required', 'string']] public string $property
- BuildInTypesRuleInferrer sẽ thêm một quy tắc dựa trên các loại php tích hợp
- Loại
8 hoặc// using an array #[Rule[['required', 'string']]] public string $property // using a string #[Rule['required|string']] public string $property // using multiple arguments #[Rule['required', 'string']] public string $property
9 sẽ thêm quy tắc// using an array #[Rule[['required', 'string']]] public string $property // using a string #[Rule['required|string']] public string $property // using multiple arguments #[Rule['required', 'string']] public string $property
0class SongData extends Data { public function __construct[ public string $title, public string $artist, ] { } public static function rules[]: array { return [ 'title' => ['required', 'string'], 'artist' => ['required', 'string'], ]; } }
- Loại
1 sẽ thêm quy tắcclass SongData extends Data { public function __construct[ public string $title, public string $artist, ] { } public static function rules[]: array { return [ 'title' => ['required', 'string'], 'artist' => ['required', 'string'], ]; } }
2class SongData extends Data { public function __construct[ public string $title, public string $artist, ] { } public static function rules[]: array { return [ 'title' => ['required', 'string'], 'artist' => ['required', 'string'], ]; } }
- Loại
3 sẽ thêm quy tắcclass SongData extends Data { public function __construct[ public string $title, public string $artist, ] { } public static function rules[]: array { return [ 'title' => ['required', 'string'], 'artist' => ['required', 'string'], ]; } }
3class SongData extends Data { public function __construct[ public string $title, public string $artist, ] { } public static function rules[]: array { return [ 'title' => ['required', 'string'], 'artist' => ['required', 'string'], ]; } }
- Loại
5 sẽ thêm quy tắcclass SongData extends Data { public function __construct[ public string $title, public string $artist, ] { } public static function rules[]: array { return [ 'title' => ['required', 'string'], 'artist' => ['required', 'string'], ]; } }
5class SongData extends Data { public function __construct[ public string $title, public string $artist, ] { } public static function rules[]: array { return [ 'title' => ['required', 'string'], 'artist' => ['required', 'string'], ]; } }
- Loại
- AttributesRuleInferrer sẽ đảm bảo rằng các thuộc tính quy tắc mà chúng tôi đã mô tả ở trên cũng sẽ thêm các quy tắc của chúng
Có thể viết suy luận quy tắc của bạn. Bạn có thể tìm thêm thông tin ở đây
##Bỏ qua xác thực
Đôi khi, bạn không muốn các thuộc tính được xác thực tự động, chẳng hạn như khi bạn ghi đè phương thức quy tắc theo cách thủ công như thế này
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
2Khi một yêu cầu đang được xác thực, các quy tắc sẽ như thế này
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
3Chúng tôi biết rằng chúng tôi không bao giờ muốn xác thực thuộc tính
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
public static function rules[]: array
{
return [
'title' => ['required', 'string'],
'artist' => ['required', 'string'],
];
}
}
7 vì nó sẽ không có trong tải trọng yêu cầu, điều này có thể được thực hiện như vậyclass SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
4Bây giờ các quy tắc xác nhận sẽ trông như thế này
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
5##Ghi đè trình xác thực
Trước khi xác thực các giá trị, có thể bổ sung vào trình xác thực. Điều này có thể được thực hiện như vậy
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
6##Ghi đè tin nhắn
Có thể ghi đè lên các thông báo lỗi sẽ được trả về khi lỗi
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
7##Ghi đè thuộc tính
Trong quy tắc xác thực mặc định của Laravel, bạn có thể ghi đè lên tên của thuộc tính như vậy
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
8##Ghi đè chức năng xác thực khác
Bên cạnh việc ghi đè trình xác thực, thuộc tính và thông báo, bạn cũng có thể ghi đè chức năng sau
Chuyển hướng khi xác thực không thành công
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
}
9Hoặc tuyến đường sẽ được sử dụng để chuyển hướng sau khi xác thực không thành công
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
0Có nên dừng xác thực trong lần thất bại đầu tiên hay không
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
1Tên của túi lỗi
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
2##Sử dụng phụ thuộc trong chức năng ghi đè
Bạn cũng có thể cung cấp các phụ thuộc để được đưa vào trong các phương thức chức năng của trình xác thực được ghi đè như
class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
public static function rules[]: array
{
return [
'title' => ['required', 'string'],
'artist' => ['required', 'string'],
];
}
}
8 , class SongData extends Data
{
public function __construct[
public string $title,
public string $artist,
] {
}
public static function rules[]: array
{
return [
'title' => ['required', 'string'],
'artist' => ['required', 'string'],
];
}
}
9, class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
00, class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
01, class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
02, class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
03class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
3##Ủy quyền yêu cầu
Giống như với các yêu cầu của Laravel, chỉ có thể ủy quyền một hành động cho một số người nhất định
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
4Nếu phương thức trả về
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
04, thì một class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
05 sẽ được ném ra##Xác thực tập hợp các đối tượng dữ liệu
Giả sử chúng ta muốn tạo một đối tượng dữ liệu như thế này từ một yêu cầu
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
5Vì
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
7 có các quy tắc xác thực riêng nên gói sẽ tự động áp dụng chúng khi giải quyết các quy tắc xác thực cho đối tượng nàyTrong trường hợp này, các quy tắc xác thực cho
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
07 sẽ như thế nàyclass SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
6##Xác thực một đối tượng dữ liệu mà không cần yêu cầu
Cũng có thể xác thực giá trị cho đối tượng dữ liệu mà không cần sử dụng yêu cầu
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
7Điều này sẽ ném một
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
08 hoặc trả lại phiên bản đã xác thực của tải trọngCó thể trả về một đối tượng dữ liệu khi tải trọng hợp lệ khi gọi
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
8##Truy xuất các quy tắc xác thực cho một đối tượng dữ liệu
Bạn có thể truy xuất các quy tắc xác thực mà một đối tượng dữ liệu sẽ tạo ra như vậy
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
9Điều này sẽ tạo ra mảng sau với các quy tắc
class SongController{
...
public function update[
Song $model,
SongData $data
]{
$model->update[$data->all[]];
return redirect[]->back[];
}
}
6Bạn cũng có thể chọn các trường cụ thể như vậy
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
1Mà sẽ cung cấp cho bạn các quy tắc sau đây
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
2Khi bạn có các quy tắc tùy thuộc vào tải trọng cụ thể, bạn có thể cung cấp tải trọng
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
3##Xác thực và lồng hoặc thu thập cùng một lớp
Xin lưu ý rằng không thể lồng hoặc thu thập cùng một lớp và sau đó tạo quy tắc xác thực. Các ví dụ sau đây sẽ gây ra một vòng lặp vô hạn vì các quy tắc sẽ được tạo lặp đi lặp lại cho đến khi bộ nhớ của bạn cạn kiệt
class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
4class SongData extends Data
{
public function __construct[
public string $title,
#[Max[20]]
public string $artist,
] {
}
}
5Bạn vẫn có thể sử dụng gói này với các loại đối tượng dữ liệu này. Các phương pháp tạo phép thuật, biến đổi và tất cả các chức năng khác của gói này sẽ vẫn hoạt động
Nhưng việc sử dụng đối tượng dữ liệu này để tạo quy tắc xác thực là không thể. Lưu ý rằng gói cũng tạo quy tắc xác thực khi đưa đối tượng dữ liệu vào bộ điều khiển. Giải pháp tốt nhất trong trường hợp như vậy là xác định thủ công các quy tắc xác thực và sử dụng phương thức tạo kỳ diệu để tạo các đối tượng dữ liệu như thế này