我似乎无法正确验证数组:在我的例子中,每个音乐家必须至少有一个乐器($ 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?
答案 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);
}
这对我来说并不明显且不直观,但它似乎是处理验证数组的最“内置”方式。