在 Laravel 5.7 中验证表单中的输入数组

Dil*_*ani 4 php laravel laravel-5 laravel-validation laravel-5.7

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

<input type='text' name='items[]'>
<input type='text' name='items[]'>
<input type='text' name='items[]'>
Run Code Online (Sandbox Code Playgroud)

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

array:1 [?
  "items" => array:3 [?
    0 => "item one"
    1 => "item two"
    2 => "item three"
  ]
]
Run Code Online (Sandbox Code Playgroud)

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

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

这是行不通的。我尝试了大小、必需、可为空的组合。什么都行不通。

Mar*_*łek 6

事实上,使用它就足够了:

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

所做的更改:

  • 使用items而不是items.*- 你想设置一般项目的规则,如果你使用items.*它意味着你将规则分别应用于数组的每个发送元素
  • 删除,size:1因为这意味着您只想发送一个元素(并且您至少需要一个)。你根本不需要它,因为你有required规则。您可以阅读所需规则的文档,你可以阅读那里空数组会情况required的规则将失效,所以这个required规则阵列使得该阵列应该至少有1元,所以你不需要min:1size:1根本


Sur*_*ane 0

就像往常一样正常地做:

 $validator = Validator::make($request->all(),[
    'items' => 'required'
  ]);
Run Code Online (Sandbox Code Playgroud)