Laravel验证数组必须包含一项,其中boolean为true

时间:2020-06-29 22:51:00

标签: php laravel validation

我正在验证问题和答案(用于测试创建)。我想确保答案数组至少包含一个“正确”项目。所以class person { constructor(data) { this.info = data; } welcome(){ return `hello: ${this.info.name} your age is ${this.info.age}` } getSalary(){ return this.info.salary; } getAge(){ return this.info.age; } } var mario = { name: "Mario", age: 30, salary: 5555, } var data = new person(mario); console.log(data.welcome()); console.log(data.getSalary()); console.log(data.getAge());

我目前有以下内容:

answers.*.correct => true

此刻,我可能会错过添加正确答案而导致无法回答的问题。

我检查了文档,看不到任何突出的内容。

任何帮助将不胜感激。

编辑答案

我用了这个(答案中提到):Laravel validate at least one item in a form array

我设法创建了一个自定义规则,如下所示:

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'
        ];
    }

然后在我现有的rules()部分中,针对在我创建的新规则中添加的请求:

    public function passes($attribute, $value)
    {
        foreach ($value as $arrayElement) {
            if ($arrayElement['correct'] == true) {
                return true;
            }
        }

        return false;
    }

1 个答案:

答案 0 :(得分:0)

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

  1. 最大字符串255个字符(文本)
  2. 布尔值(正确)

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

  • 不要发送所有答案,也不要在单个数组中正确回答它们。而是将选择的答案发送给您的api,并在用户单击时将每个答案的请求发送给您。这将1.防止某人向您发送他回答100%正确的信息(如果这是学校软件,则不好:))和2.取决于有多少问题,它将减少发送到服务器的数据到一个最小值,主要是因为...
  • ...看来您将问题的全文发送到服务器以标识答案。对每个问题使用唯一的ID,并将其作为问题ID +所选或输入的答案发送。

编辑:感谢您的评论,对我的误解表示抱歉。如上所述,当然,自定义验证在这里对于每个问题检查至少一个答案是否正确是完全有意义的。检查一下:https://stackoverflow.com/a/53791208/2264877