Laravel 5.5 有条件地添加验证规则

Bra*_*hof 4 php laravel laravel-5 laravel-validation laravel-5.5

我有数据通过这样的 AJAX 帖子输入:

data:
     0: {type: 'percent', amount: 10,…}
     1: {type: 'percent', amount: 200,…}
Run Code Online (Sandbox Code Playgroud)

如您所见,数组中的最后一项是有问题的。如果类型是百分比,并且数量超过 100,则验证应该失败。

我正在使用以下函数来验证请求:

public function validateRequest( $request ) {
    $rules = [
        'data.*.type'   => 'required|alpha',
        'data.*.amount' => 'required|min:1|int',
    ]
    $messages = [...];
    Validator::make($request->all(), $rules, $messages)->validate();
}
Run Code Online (Sandbox Code Playgroud)

我一直在查看验证页面,我认为我需要有条件地将max:100规则添加到该特定数组索引,但前提是该特定数组索引'typepercent. 我只是不确定如何完成。

先感谢您!

Mar*_*łek 5

我通常会做这样简单的事情:

$rules = [
    'data.*.type'   => 'required|alpha',
    'data.*.amount' => ['required', 'min:1', 'int'],
];

foreach ($request->input('data') as $key => $value)
{
   if (array_get($value, 'type') == 'percent') {
      $rules["data.{$key}.amount"][] = 'max:100';
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意规则而不是管道的数组语法,以便更轻松地添加其他规则。