如何验证Laravel 5.0中的数组输入

时间:2017-08-14 12:44:41

标签: arrays validation laravel-5 laravel-5.4

我有一张桌子,用户可以在其中填写信息。但是,用户可以添加行和/或删除行。我使用了克隆功能。

我的HTML看起来像:

<input type="text" class="form-control" name="TB1_a[]">
<input type="text" class="form-control" name="TB1_b[]">

如您所见,它是一个数组输入。因此,如果用户添加一行,我将在TB1_a []和TB1_b中存储两个值。 现在,我想制定我的规则,以便如果用户在TB1_a [0]内输入信息,我想要TB1_b [0],但是如果两者 TB1_a [0]和TB1_b则有效[0]是空的。

我的验证规则:

'TB1_a.*' => 'required_with:TB1_b.*',
'TB1_b.*' => 'required_with:TB1_a.*'

但是,这些规则无法检测到我指的是数组,这意味着Laravel没有检测到&#39;。*&#39;。我还想指出,这个逻辑与Laravel 5.4完美配合,但我不得不降级我的Laravel,现在它停止工作了。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

据我所知,这个[.*]符号是在Laravel 5.2+中引入的。因此,要实现数组验证,您需要添加自定义规则。 Reference Link

public function rules()
{
  $rules = [
    'name' => 'required|max:255',//add more static rules as you need
  ];

  foreach($this->request->get('TB1_a') as $key => $val)
  {
    $rules['TB1_a.'.$key] = 'required_with:TB1_b.'.$key;
  }

  foreach($this->request->get('TB1_b') as $key => $val)
  {
    $rules['TB1_b.'.$key] = 'required_with:TB1_a.'.$key;
  }

  /*
  To combine the both validation rules in 1 loop. considering number of both fields are always equal
      foreach($this->request->get('TB1_a') as $key => $val)
      {
        $rules['TB1_a.'.$key] = 'required_with:TB1_b.'.$key;
        $rules['TB1_b.'.$key] = 'required_with:TB1_a.'.$key;
      }  
  */
  return $rules;
}