我有一个表单,它有一个重复的选择列表,如下所示:
<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'])时,它只有在没有选择任何选择项值的情况下才起作用,但是如果选择了其中一个,则验证允许其他值为null。
我需要验证来验证每个名为equipments[x]的选择列表,其中x是提供给元素名称属性的任何键。
发布于 2017-08-31 00:09:59
问题不在于您的Laravel验证规则。这是你的输入。如果您的select没有选项,则索引在请求中不存在,这就是验证规则仍将通过的原因,因为它不会遍历索引。
您可以检查是否正确地接收了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)发布于 2017-08-31 00:02:27
您可以使用如下所示的函数完成此操作:
public function validate_array($request){
$rules = [];
foreach($request->get('equipments') as $key => $val)
{
array_push($rules, ['equipments.'.$key => 'required']);
}
return $rules;
}然后使用$this->validate;验证规则,如下所示:
public function installCavitySave(Request $request)
{
//validate select boxes
$rules = $this->validate_array($request);
$this->validate($request,$rules);
}https://stackoverflow.com/questions/45964816
复制相似问题