我的表单有一个重复的选择列表,如下所示:
<select class="form-control set-25" name="equipments[:selectName:-1]">...
<select class="form-control set-24" name="equipments[:selectName:-2]">....
<select class="form-control set-8" name="equipments[:selectName:-3]">....
我想验证这些列表中的每一个。
public function installCavitySave(Request $request)
{
$this->validate(request(), ['equipments.*' => 'required']);
dd(request());
}
但是,该规则不起作用。当我尝试$this->validate(request(), ['equipments' => 'required'])
时,只有在没有选择任何选择选项值的情况下才有效,但如果选择了其中一个选项值,则验证允许其他选项为空。
我需要验证来验证名为equipments[x]
的每个选择列表,其中x
是提供给元素名称属性的任何键。
答案 0 :(得分:1)
问题不在于您的Laravel验证规则。这是你的投入。如果你的select没有选项,那么你的请求中就不存在索引,这就是验证规则仍然会通过的原因,因为它不会遍历索引。
您可以检查是否正确接收选择索引:
dd($request->input('equipments.*'));
如果您默认添加空选项字段:
<form method="POST">
<select class="form-control set-25" name="equipments[:selectName:-1]">
<option value=""></option>
<option value="test">Test</option>
</select>
<select class="form-control set-25" name="equipments[:selectName:-2]">
<option value=""></option>
<option value="test">Test</option>
</select>
<select class="form-control set-25" name="equipments[:selectName:-3]">
<option value=""></option>
<option value="test">Test</option>
</select>
<button type="submit">Submit</button>
</form>
然后在你的控制器中:
$this->validate($request, [
'equipments.*' => 'required'
]);
您将收到的错误:
array (size=3)
'equipments.:selectName:-1' =>
array (size=1)
0 => string 'validation.required' (length=19)
'equipments.:selectName:-2' =>
array (size=1)
0 => string 'validation.required' (length=19)
'equipments.:selectName:-3' =>
array (size=1)
0 => string 'validation.required' (length=19)
答案 1 :(得分:0)
你可以使用这样的函数来做到这一点:
l = ['naruto - 11', 'naruto - 13', 'naruto - 12']
sorted([i.split('- ') for i in l])[-1]
然后使用public function validate_array($request){
$rules = [];
foreach($request->get('equipments') as $key => $val)
{
array_push($rules, ['equipments.'.$key => 'required']);
}
return $rules;
}
验证规则,如下所示:
$this->validate;