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

Php Laravel验证数组必须包含一个布尔值为true的项,php,laravel,validation,Php,Laravel,Validation,我正在验证问题和答案(用于测试创建)。我希望确保答案数组至少包含一个“正确”项。因此,答案在哪里。*.correct=>true 我目前有以下情况: 公共功能规则() { 返回[ 'title'=>'必需|字符串|最大值:255', 'test_id'=>'required | integer |存在:tests,id', '内容'=>'必需', “答案”=>“必需|数组”, 'answers.*.text'=>'必填|字符串|最大值:255', 'answers.*.correct'=>'必需

我正在验证问题和答案(用于测试创建)。我希望确保答案数组至少包含一个“正确”项。因此,
答案在哪里。*.correct=>true

我目前有以下情况:

公共功能规则()
{
返回[
'title'=>'必需|字符串|最大值:255',
'test_id'=>'required | integer |存在:tests,id',
'内容'=>'必需',
“答案”=>“必需|数组”,
'answers.*.text'=>'必填|字符串|最大值:255',
'answers.*.correct'=>'必需|布尔'
];
}
目前,我可能会错过添加正确答案的机会,从而导致无法回答的问题

我查看了文档,没有发现任何突出的内容

任何帮助都将不胜感激

编辑答案

我用了这个(正如答案提到的):

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

公共函数传递($attribute,$value)
{
foreach(价值为$arrayElement){
if($arrayElement['correct']==true){
返回true;
}
}
返回false;
}
然后,在我创建的新规则中添加的请求的“现有规则”(my existing rules)部分中:

'answers'=>['required','array',new arrayatleastoneboltrue()],
您正在验证阵列应答是否具有:

  • 最多255个字符的字符串(文本)
  • 布尔值(正确)
  • 要检查此阵列的完整性,Laravel请求是错误的检查位置。从技术上讲,您可以创建自己的验证规则,但在这里没有意义。相反,您应该在控制器中迭代此数组,并验证每个答案的完整性。 还有两个更好的想法:

    • 不要在一个数组中发送所有答案以及答案是否正确。取而代之的是,在用户单击所选答案时,将每个答案发送一个请求到您的api。这将是1。防止有人向您发送他回答100%正确的信息(如果这是学校软件,则不太好:)和2。根据有多少问题,它将把发送到服务器的数据减少到最小,主要是因为
    • 。。。您似乎将问题的全文发送给服务器以确定答案。每个问题使用唯一的ID,并将其作为问题ID+选定或输入的答案发送
    编辑:谢谢您的评论,很抱歉我在这里的误解。如上所述,当然,定制验证在这里完全有意义,可以检查每个问题是否至少有一个答案是正确的。检查此项:

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

  • 最多255个字符的字符串(文本)
  • 布尔值(正确)
  • 要检查此阵列的完整性,Laravel请求是错误的检查位置。从技术上讲,您可以创建自己的验证规则,但在这里没有意义。相反,您应该在控制器中迭代此数组,并验证每个答案的完整性。 还有两个更好的想法:

    • 不要在一个数组中发送所有答案以及答案是否正确。取而代之的是,在用户单击所选答案时,将每个答案发送一个请求到您的api。这将是1。防止有人向您发送他回答100%正确的信息(如果这是学校软件,则不太好:)和2。根据有多少问题,它将把发送到服务器的数据减少到最小,主要是因为
    • 。。。您似乎将问题的全文发送给服务器以确定答案。每个问题使用唯一的ID,并将其作为问题ID+选定或输入的答案发送

    编辑:谢谢您的评论,很抱歉我在这里的误解。如上所述,当然,定制验证在这里完全有意义,可以检查每个问题是否至少有一个答案是正确的。检查一下:

    根据解释,他们询问使用Laravel创建测试。这就是为什么要提交完整的问答数据。把他们想象成老师,而不是学生。对我来说,这更像是一个用一组答案创造问题的请求。OP试图确保他们的问题至少有一个正确答案。这就是为什么他们提到一个“不可能”的问题,如果没有正确的答案。根据解释,他们问的是关于使用Laravel创建测试。这就是为什么要提交完整的问答数据。把他们想象成老师,而不是学生。对我来说,这更像是一个用一组答案创造问题的请求。OP试图确保他们的问题至少有一个正确答案。这就是为什么他们提到一个“不可能”的问题,如果没有正确的答案。我肯定会检查自定义验证器。你可以为你的答案数组创建一个验证器,它应该检查以确保数组是给定的,至少有两个元素,并且至少有一个(并且只有一个,如果不是多选的话)答案必须是真的。我肯定会检查自定义验证器。您可以为您的答案数组创建一个验证器,该验证器应该检查以确保给定了一个数组,该数组至少包含两个元素,并且至少有一个(如果不是多选的话,则只有一个)答案必须为true。