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

我正在验证问题和答案(用于测试创建)。我想确保答案数组至少包含一个“正确”项目。那么在哪里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()],


饮歌长啸
浏览 154回答 1
1回答

开满天机

您在这里验证数组答案是否具有:最大的字符串。255 个字符(文本)布尔值(正确)要检查此数组的完整性,Laravel 请求是错误的检查位置。从技术上讲,可以创建自己的验证规则,但在这里没有意义。相反,您应该在控制器中迭代此数组并验证每个答案的完整性。为了做得更好,还有两个想法:不要在一个数组中发送所有答案以及是否正确回答了这些答案。相反,在用户单击它时,将所选答案发送到您的 api,并为每个答案发送一个请求。这将 1. 防止有人向您发送他 100% 正确回答的信息(如果这是学校软件则不好:)) 2. 根据问题的数量,它将减少发送到服务器的数据一个最小值,主要是因为......看来您将问题的全文发送到服务器来识别答案。每个问题使用唯一的 ID,并将其作为问题 ID + 所选或输入的答案发送。
打开App,查看更多内容
随时随地看视频慕课网APP