我正在验证问题和答案(用于测试创建)。我想确保答案数组至少包含一个“正确”项目。那么在哪里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 验证表单数组中的至少一项我设法创建一个自定义规则,如下所示: public function passes($attribute, $value) { foreach ($value as $arrayElement) { if ($arrayElement['correct'] == true) { return true; } } return false; }然后在我创建的新规则中添加的请求的现有规则()部分中:'answers' => ['required', 'array', new ArrayAtLeastOneBoolTrue()],
1 回答

开满天机
TA贡献1786条经验 获得超13个赞
您在这里验证数组答案是否具有:
最大的字符串。255 个字符(文本)
布尔值(正确)
要检查此数组的完整性,Laravel 请求是错误的检查位置。从技术上讲,可以创建自己的验证规则,但在这里没有意义。相反,您应该在控制器中迭代此数组并验证每个答案的完整性。为了做得更好,还有两个想法:
不要在一个数组中发送所有答案以及是否正确回答了这些答案。相反,在用户单击它时,将所选答案发送到您的 api,并为每个答案发送一个请求。这将 1. 防止有人向您发送他 100% 正确回答的信息(如果这是学校软件则不好:)) 2. 根据问题的数量,它将减少发送到服务器的数据一个最小值,主要是因为...
...看来您将问题的全文发送到服务器来识别答案。每个问题使用唯一的 ID,并将其作为问题 ID + 所选或输入的答案发送。
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消