我有一个表格,我有标题,正文,答案[] [答案]和选项[] [选项]。
我想至少必须为给定的问题选择一个答案,例如:
我有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',
];
但这不起作用。我想至少必须选择一个答案。
请帮帮我。
答案 0 :(得分:1)
问题是,在$ _POST上,如果没有选择答案,将传递一个填充空字符串的数组。
$answers[0][0] = ''
$answers[0][1] = ''
$answers[0][2] = ''
因此,由于空字符串,数组计数将大于零,因此以下操作无效:
$validator = Validator::make($request->all(), [
'answers.*' => 'required'
]);
解决此问题的最简单方法是使用Laravel的Validator :: extend函数创建自定义Validator规则。
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()中,它从数组中删除所有空属性。现在,您可以设置所需的任何最小答案数。
Validator :: extendImplicit()vs Validator :: extend()
要使规则在属性为空时运行,规则必须暗示该属性是必需的。创造这样一个隐含的"扩展,使用Validator :: extendImplicit()方法:
答案 1 :(得分:0)
试试这个,
app:onClick="@{handler::onItemClick}"
它会帮助你。我想。