对阵列的Laravel验证

时间:2018-06-13 08:06:21

标签: arrays laravel laravel-validation

我有这个要求:

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

我有这条路:

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

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

查看有关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)创建表单请求类

php artisan make:request StoreBlogPost

2)在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();
}

答案 1 :(得分:1)

你可以这样做:

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

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

答案 2 :(得分:0)

假设我有一组用户

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

我会像下面一样验证它:

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

此处 * 用作占位符