【问题标题】:How to validate dynamic inputs in laravel 5.1 [duplicate]如何验证laravel 5.1中的动态输入[重复]
【发布时间】:2018-08-02 00:30:57
【问题描述】:

我在互联网上尝试了一些解决方案,但他们使用的是不同版本的 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 版本

【问题讨论】:

  • 嗨@vijaykumar 我还想在验证之前检查输入是否存在。抱歉,请看更新
  • @Jonjie 我已经添加了我的答案,看看。
  • 您没有为true_false 指定正确的验证?你想要全部还是至少一个?
  • 嗨@C2486 都是必需的。

标签: laravel validation


【解决方案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){

}

希望你能理解。

【讨论】:

  • 嗨,萨加尔。如何在我的控制器中使用这些方法?
  • @Jonjie 只是提到了我最后提到的请求类,当您发送表单请求时会自动调用这些类。
  • 我会试试这个,但是。如果输入true_false[] 不存在怎么办?还有其他输入吗?请查看我的更新。
  • @Jonjie 第一条规则将检查是否存在验证是否失败。然后对其他输入也这样做。
  • @Jonjie 如果是这样,则使用required_with 验证规则,以便仅当数组存在时才验证数组中的值。
【解决方案2】:

我没有完全得到你的问题,但我认为这就是你要找的东西

$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;

【讨论】:

  • 这适用于 laravel 5.1 吗?
  • 是的尝试一次@Jonjie
  • @vijaykumar 我不这么认为,即使在官方文档中,laravel 5.1 中也没有提到数组输入验证
  • @vijaykumar 这很好,它将检查输入必须是数组,而不是数组内的元素。我认为在 5.1 或更低版本中没有提到使用点表示法。
  • 是的@SagarGautam。对不起,我没有检查更新我的答案。
猜你喜欢
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2016-01-20
  • 2015-10-29
  • 2021-06-24
  • 2017-01-06
  • 2018-08-15
相关资源
最近更新 更多