首页 > 解决方案 > 复选框数组的验证规则“介于”始终有效

问题描述

如果有几个问题显示带有排名的选项 ID(选中的第一个复选框是首选等)。这是通过表单发送的简化版var_dump($_POST)

Array
(
    [_token] => 6vPgIM1MX7MJ0DzMX2OFjCdPEBBel5mRJ6RzrEjR
    [11] => Array // Means question id 11
        (
            [42] => 2 // Means choice id 42 was chosen second
            [43] => 1 // Means choice id 43 was chosen first
            [44] => 3 // Means choice id 44 was chosen third
        )

    [12] => 

    [13] => Array
        (
            [4] => 1
        )

    [btn-validate] => CONTINUE
)

然后我var_dump($validationRules)的如下:

Array
(
    [11] => Array
        (
            [0] => between:0,2
        )

    [12] => Array
        (
            [0] => between:1,3
        )

    [13] => Array
        (
            [0] => between:0,1
        )
)

最后var_dump($validationMessages)(但在这里不是那么重要):

Array
(
    [11.between] => You should select between 0 and 2 choices
    [12.between] => You should select between 1 and 3 choices
    [13.between] => You should select between 0 and 1 choices
)

这一切都是这样结束的:

$validator = Validator::make($request->all(), $validationRules, $validationMessages);

if ($validator->fails()) {
    var_dump($validator->errors());
    exit('fail'); // Never ends up here
}
exit('all good'); // Always ends up here

如何使between:x,y验证规则与一组值一起工作?

标签: laravellaravel-5laravel-5.8

解决方案


我认为您误解了 between 规则如何适用于数组。

规则文档之间

(...) 字符串、数字、数组和文件的评估方式与大小规则相同。

尺寸规则文档

(...) 对于数组,大小对应于数组的计数。(...)

这意味着您指定的验证规则意味着评估每个数组值的计数。在每种情况下,这些都被评估为真,因为在您的每种情况下计数都是 1。


推荐阅读