2016-03-28 77 views
1

我有一个表格,我有标题,正文,答案[] [答案]和选项[] [选项]。Laravel 5.2验证器:验证阵列请求参数,至少必须选择一个值

我想ATLEAST一个答案必须选择给定的问题,例如:

我有ABC问题,有5个选项的这个问题,现在ATLEAST一个答案必须检查或全部给定的问题。

努力

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', 
     ]; 

但是,这是行不通的。我想至少选择一个答案。

请帮帮我。

回答

1

问题是,如果没有选择答案,$ _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' 
    ]); 

魔术发生在array_filter(),这将删除阵列中的所有空属性。现在您可以设置所需的最少数量的答案。

验证:: extendImplicit()与验证::延伸()

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

Laravel's validation docs

0

试试这个,

'answer.0' => 'required'  

它会帮助你。我认为。