我的表单多次具有相同的输入字段。我的表单字段如下:
<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'
]);
它不起作用。我尝试使用大小,必需,可为空的组合。什么都没有。
答案 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",
]);
在上面的示例中:
答案 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:1
或size:1
答案 5 :(得分:0)
知道您正在使用最新版本的Laravel,我真的建议您研究Form Request feature。这样一来,您就可以将验证与控制器解耦,从而使其更加整洁。
无论如何,正如我上面提出的答案所建议的,您应该足够:
'items' => 'required|array'