Php Laravel 5.2验证程序:验证数组请求参数,必须至少选择一个值

Php Laravel 5.2验证程序:验证数组请求参数,必须至少选择一个值,php,validation,laravel-5.2,Php,Validation,Laravel 5.2,我有一个表格,其中有标题、正文、答案[][答案]和选项[][选项] 我希望给定问题至少必须选择一个答案,例如: 我有一个ABC问题,该问题有5个选项,现在必须至少检查一个答案,或者检查给定问题的全部答案 努力 protected $rules = [ 'title' => 'required|unique:contents|max:255', 'body' => 'required|min:10', 'type'

我有一个表格,其中有标题、正文、答案[][答案]和选项[][选项]

我希望给定问题至少必须选择一个答案,例如:

我有一个
ABC
问题,该问题有5个选项,现在必须至少检查一个答案,或者检查给定问题的全部答案

努力

protected $rules = [
            'title' => 'required|unique:contents|max:255',
            'body' => 'required|min:10',
            'type' => 'required',
            'belongsto' => 'sometimes|required',
            'options.*.option' => 'required|max:100',
            'answers.*.answer' => 'required',
        ];
但这是行不通的。我希望至少选择一个答案


请帮助我。

问题是,如果未选择答案,则在$\u POST上会传递一个填充了空字符串的数组

$answers[0][0] = ''
$answers[0][1] = ''
$answers[0][2] = ''
因此,由于空字符串,数组计数将大于零,因此以下操作将不起作用:

 $validator = Validator::make($request->all(), [
    'answers.*'   => 'required'
  ]);
解决这个问题的最简单方法是使用Laravel的Validator::extend函数创建一个自定义验证器规则

  Validator::extendImplicit('arrayRequireMin', function($attribute, $values, $parameters)
  {
      $countFilled = count(array_filter($values));
      return ($countFilled >= $parameters[0]);
  });
然后在验证请求中调用它:

  $validator = Validator::make($request->all(), [
    'answers.*'   => 'arrayRequireMin:1'
  ]);
魔术发生在数组_filter()中,它从数组中删除所有空属性。现在您可以设置所需的任何最小答案数

验证器::extendImplicit()与验证器::extend()的比较

对于即使属性为空也要运行的规则,该规则必须暗示该属性是必需的。要创建这样一个“隐式”扩展,请使用Validator::extendImplicit()方法:

试试这个

    'answer.0' => 'required'       
它会帮助你的。我想