如何验证laravel 5.1中的动态输入[重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我已尝试过互联网上的一些解决方案,但他们正在使用不同版本的laravel。我在这里使用laravel 5.1。问题是我无法使用$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[]">

这只会验证第一个true_false[]输入。

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

laravel validation
2个回答
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){

}

我希望你能理解。


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;
© www.soinside.com 2019 - 2024. All rights reserved.