验证Laravel 5.7中形式的输入数组

时间:2018-09-19 11:10:26

标签: php laravel laravel-5 laravel-validation laravel-5.7

我的表单多次具有相同的输入字段。我的表单字段如下:

<input type='text' name='items[]'>
<input type='text' name='items[]'>
<input type='text' name='items[]'>

请求包含($ request ['items'):

array:1 [▼
  "items" => array:3 [▼
    0 => "item one"
    1 => "item two"
    2 => "item three"
  ]
]

我希望至少填写一项。我当前在控制器中的验证是

    $validator = Validator::make($request->all(),[
        'items.*' => 'required|array|size:1'
    ]);

它不起作用。我尝试使用大小,必需,可为空的组合。什么都没有。

6 个答案:

答案 0 :(得分:0)

只需像往常一样正常操作即可:

 $validator = Validator::make($request->all(),[
    'items' => 'required'
  ]);

答案 1 :(得分:0)

您可以像这样检查它:

$validator = Validator::make($request->all(), [
    "items"    => "required|array|min:1",
    "items.*"  => "required|string|distinct|min:1",
]);

在上面的示例中:

  • “ items”必须是至少包含1个元素的数组。
  • “ items”数组中的值必须是不同的(唯一)字符串,长度至少为1个字符。

答案 2 :(得分:0)

您应该尝试以下操作:

$validator = $request->validate([
    "items"    => "required|array|min:3",
    "items.*"  => "required|string|distinct|min:3",
]);

答案 3 :(得分:0)

您可以将自定义规则与闭包一起使用。

https://laravel.com/docs/5.7/validation#custom-validation-rules

要检查数组是否具有所有空值,请使用array_filter对其进行检查,如果数组全为空,则返回false。

类似...

  $request->validate([

    'items' => [
      // $attribute = 'items', $value = items array, $fail = error message as string
       function($attribute, $value, $fail) {
         if (!array_filter($value)) {
           $fail($attribute.' is empty.');
         } 
       },
     ]
   ]);

这将设置错误消息:“项目为空。”

答案 4 :(得分:0)

实际上,足够使用:

$validator = Validator::make($request->all(),[
        'items' => 'required|array'
    ]);

所做的更改:

  • 使用items代替items.*-您要设置常规项目的规则,如果使用items.*,则意味着您将规则分别应用于数组的每个已发送元素
  • 删除了size:1,因为这意味着您希望只发送一个元素(并且至少要发送一个)。您完全不需要它,因为您有required条规则。您可以阅读documentation for required rule,并且可以在其中读取空数组,这可能会导致required规则失败,因此该数组的required规则会使该数组至少包含1个元素,因此您根本不需要min:1size:1

答案 5 :(得分:0)

知道您正在使用最新版本的Laravel,我真的建议您研究Form Request feature。这样一来,您就可以将验证与控制器解耦,从而使其更加整洁。

无论如何,正如我上面提出的答案所建议的,您应该足够:

'items' => 'required|array'