首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel重复选择列表验证

Laravel重复选择列表验证
EN

Stack Overflow用户
提问于 2017-08-30 23:50:41
回答 2查看 632关注 0票数 2

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

代码语言:javascript
复制
<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]">....

我想验证这些列表中的每一个。

代码语言:javascript
复制
public function installCavitySave(Request $request)
    {

        $this->validate(request(), ['equipments.*' => 'required']);
       dd(request());
    }

但是,该规则不起作用。当我尝试$this->validate(request(), ['equipments' => 'required'])时,它只有在没有选择任何选择项值的情况下才起作用,但是如果选择了其中一个,则验证允许其他值为null。

我需要验证来验证每个名为equipments[x]的选择列表,其中x是提供给元素名称属性的任何键。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-31 00:09:59

问题不在于您的Laravel验证规则。这是你的输入。如果您的select没有选项,则索引在请求中不存在,这就是验证规则仍将通过的原因,因为它不会遍历索引。

您可以检查是否正确地接收了select索引:

代码语言:javascript
复制
dd($request->input('equipments.*'));

如果默认情况下添加空的选项字段:

代码语言:javascript
复制
<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>

然后在你的控制器中:

代码语言:javascript
复制
$this->validate($request, [
    'equipments.*' => 'required'
]);

您将收到的错误:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-08-31 00:02:27

您可以使用如下所示的函数完成此操作:

代码语言:javascript
复制
public function validate_array($request){
  $rules = [];
  foreach($request->get('equipments') as $key => $val)
  {
    array_push($rules, ['equipments.'.$key => 'required']);
  }
  return $rules;
}

然后使用$this->validate;验证规则,如下所示:

代码语言:javascript
复制
public function installCavitySave(Request $request)
{
  //validate select boxes
  $rules = $this->validate_array($request);
  $this->validate($request,$rules);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45964816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档