【发布时间】:2020-10-20 04:29:43
【问题描述】:
我正在验证问题和答案(用于创建测试)。我想确保 answers 数组至少包含一个“正确”项目。那么answers.*.correct => true.
我目前有以下:
public function rules()
{
return [
'title' => 'required|string|max:255',
'test_id' => 'required|integer|exists:tests,id',
'content' => 'required',
'answers' => 'required|array',
'answers.*.text' => 'required|string|max:255',
'answers.*.correct' => 'required|boolean'
];
}
目前我可能会错过添加正确答案,从而导致不可能的问题。
我查看了文档,没有发现任何突出的内容。
任何帮助将不胜感激。
编辑答案
我用过这个(如答案所述):Laravel validate at least one item in a form array
我设法像这样创建了一个自定义规则:
public function passes($attribute, $value)
{
foreach ($value as $arrayElement) {
if ($arrayElement['correct'] == true) {
return true;
}
}
return false;
}
然后在我在我创建的新规则中添加的请求的现有规则()部分中:
'answers' => ['required', 'array', new ArrayAtLeastOneBoolTrue()],
【问题讨论】:
-
我肯定会检查自定义验证器。您可以为您的 answers 数组创建一个验证器,它应该检查以确保给出了一个数组,其中至少包含两个元素,并且至少一个(并且只有一个,如果不是多选)答案必须为真。
标签: php laravel validation