为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 验证数组必须包含布尔值为 true 的一项

Laravel 验证数组必须包含布尔值为 true 的一项

PHP
饮歌长啸 2023-07-08 16:34:03
我正在验证问题和答案(用于测试创建)。我想确保答案数组至少包含一个“正确”项目。那么在哪里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个赞

您在这里验证数组答案是否具有:

  1. 最大的字符串。255 个字符(文本)

  2. 布尔值(正确)

要检查此数组的完整性,Laravel 请求是错误的检查位置。从技术上讲,可以创建自己的验证规则,但在这里没有意义。相反,您应该在控制器中迭代此数组并验证每个答案的完整性。为了做得更好,还有两个想法:

  • 不要在一个数组中发送所有答案以及是否正确回答了这些答案。相反,在用户单击它时,将所选答案发送到您的 api,并为每个答案发送一个请求。这将 1. 防止有人向您发送他 100% 正确回答的信息(如果这是学校软件则不好:)) 2. 根据问题的数量,它将减少发送到服务器的数据一个最小值,主要是因为...

  • ...看来您将问题的全文发送到服务器来识别答案。每个问题使用唯一的 ID,并将其作为问题 ID + 所选或输入的答案发送。

查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号