Laravel 数组验证

Laravel validation for arrays

我有这个要求:

GET http://example.com/test?q[]=1&q[]=2&q[]=3

我有这条路线:

Route::get('test', function(Request $req) {
    $req->validate(['q' => 'array']);
});

如何使用 Laravel 验证器向该数组的每个元素添加其他验证规则?例如,我想检查每个 q 值是否至少为 2.

感谢您的帮助。

你可以这样做:

Route::get('test', function(Request $req) {
    $req->validate([
        'q' => 'array',
        'q.*' => 'min:2'
    ]);
});

有关数组验证的详细信息,请参阅 => laravel.com/docs/5.6/validation#validating-arrays

查看有关 validating arrays 的文档。

$validator = Validator::make($request->all(), [
'person.*.email' => 'email|unique:users',
'person.*.first_name' => 'required_with:person.*.last_name',
]);

您也可以在控制器中使用 Request 对象执行此操作,documentation about validation logic

public function store(Request $request)
{
  $validatedData = $request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
  ]);

  // The blog post is valid...
}

当您有很多验证规则并希望在应用程序中分离逻辑时,还有第三种选择。看看Form Requests

1) 创建表单请求 Class

php artisan make:request StoreBlogPost

2) 添加规则到 Class,创建于 app/Http/Requestsdirectory。

public function rules()
{
  return [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
  ];
}

3) 在您的控制器中检索请求,它已经过验证。

public function store(StoreBlogPost $request)
{
  // The incoming request is valid...

  // Retrieve the validated input data...
  $validated = $request->validated();
}

假设我有一组用户

users: [
    {
        "id": 1,
        "name": "Jack",
    },
    {
        "id": 2,
        "name": "Jon"
    }
]

我会像下面这样验证它:

$request->validate([
    'users[*]'=> [
        "id" => ["integer", "required"],
        "name" => ["string", "required"]
    ]
]);

此处 * 充当占位符