Lithium Validator不处理数组?

时间:2013-03-27 16:37:27

标签: lithium

我似乎无法正确验证数组:在我的例子中,每个音乐家必须至少有一个乐器($ musician->乐器是一系列乐器)。我已尝试通过以下方式设置验证规则,但在任何情况下都不会验证(包括数组至少有一个值)。

A

public $validates = array(
    'name' => 'Required',
    'instruments' => 'Required'
);

public $validates = array(
    'name' => 'Required',
    'instruments' => array(
        array(
            'notEmpty',
            'message' => 'Required'
        )
    )
);

即使C未能验证

Validator::add('hasAtLeastOne', function($value) {
    return true;
});

...

public $validates = array(
    'name' => 'Required',
    'instruments' => array(
        array(
            'hasAtLeastOne',
            'message' => 'Required'
        )
    )
);

如何设置它以便如果验证器在阵列为空时失败,并且如果计数传递($ musician-> instruments)> = 1?

2 个答案:

答案 0 :(得分:0)

Lithium docs:

`notEmpty`: Checks that a string contains at least one non-whitespace character.

由于您要验证数组,该规则在您的情况下不起作用。

第三个例子desont'工作要么是因为你正在测试数组是否存在,而不是因为它包含任何元素。

试试这个,它应该有效:

Validator::add('hasAtLeastOne', function($data) {
    return count($data);
});

答案 1 :(得分:0)

这将检查数组中是否存在第一个仪器,这意味着至少有一个。

public $validates = array(
    'name' => 'Required',
    'instruments.0' => 'Required',
);

这不会将错误与“工具”字段相关联,因此要使其与表单一起使用,需要复制它:

$errors = $binding->errors();
if ($errors['instruments.0']) {
    $errors['instruments'] = $errors['instruments.0'];
    unset($errors['instruments.0']);
    $binding->errors($errors);
}

这对我来说并不明显且不直观,但它似乎是处理验证数组的最“内置”方式。