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'
它会帮助你的。我想