Laravel重复选择列表验证

时间:2017-08-30 15:50:41

标签: php validation laravel-5

我的表单有一个重复的选择列表,如下所示:

<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是提供给元素名称属性的任何键。

2 个答案:

答案 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;