如何验证laravel 5.1中的动态输入

时间:2018-02-22 08:24:46

标签: laravel validation

我已尝试过互联网上的一些解决方案,但他们正在使用不同版本的laravel。我在这里使用laravel 5.1。问题是我无法使用user says验证动态输入。请参阅下面的代码:

控制器

$this->validate()

查看

public function postTake(Request $request){

  $this->validate($request, [
    'true_false' => 'required',
    'multiple_choice' => 'required',
    'short_answer' => 'required'
  ]);

}


这只会验证第一个Answer1 <input type="text" name="true_false[]"><br> Answer2 <input type="text" name="true_false[]"><br> Answer3 <input type="text" name="true_false[]"><br> Answer4 <input type="text" name="true_false[]"><br> Answer5 <input type="text" name="true_false[]"><br> Answer6 <input type="text" name="multiple_choice[]"><br> Answer7 <input type="text" name="short_answer[]"> 输入。


这个问题还没有答案,因为我使用的是LARAVEL 5.1版本

2 个答案:

答案 0 :(得分:1)

在我看来,

@jeuneGuerrier补充的答案并不适用于laravel 5.1

因为,在laravel 5.2及更高版本中引入了数组输入验证,因此您需要为数组输入验证创建自定义请求类。

您可以像这样制作自定义请求

php artisan make:request ArrayInputRequest

现在创建了一个文件app/Http/Requests/ArrayInputRequest.php,您必须添加验证逻辑。

您的ArrayInputRequest.php看起来应该是这样的,

public function authorize()
{
   return true;
}

public function rules()
{
    $rules = [
        'true_false' => 'required',
        'multiple_choice' => 'required',
        'short_answer' => 'required',
    ];

    foreach($this->request->get('true_false') as $key => $val)
    {
       $rules['true_false.'.$key] = 'required';
    }

    foreach($this->request->get('multiple_choice') as $key => $val)
    {
       $rules['multiple_choice.'.$key] = 'required';
    }

    foreach($this->request->get('short_answer') as $key => $val)
    {
       $rules['short_answer.'.$key] = 'required';
    }

    return $rules;
}

public function messages()
{
 // Write error messages here
}

现在,你的控制器功能应该是,

public function postTake(ArrayInputRequest $request){

}

我希望你能理解。

答案 1 :(得分:0)

我没有完整地提出你的问题,但我认为这就是你要找的东西

$this->validate($request, [
    'true_false' => 'required|array',
    'true_false.*' => 'required|boolean',
    'multiple_choice' => 'required|array',
    'multiple_choice.*' => 'required|boolean', 
    'short_answer' => 'required|array',
    'short_answer.*' => 'required|boolean', 
  ]);

Ref

抱歉5.1不支持数组输入你做了类似的事情

 $rules = [
    'true_false' => 'required|max:255',
  ];

  foreach($this->request->get('true_false') as $key => $val)
  {
    $rules['true_false.'.$key] = 'required';
  }

  return $rules;