我遇到了Symfony 2 Validator Component的问题。
我想在不使用注释和对象的情况下使用条件验证组。
目标是只有一个合法的号码是否该国家是FR。
例如:(我删除了所有不感兴趣的部分。)
$data = array('country'=>'FR', 'legalNo'=>'');
$myCollection = new Assert\Collection(array(
'country'=>array(
'constraints'=>array(
new Assert\NotBlank()
)
),
'legalNo'=>array(
'groups'=>array('legal'),
'constraints'=>array(
new Assert\NotBlank(array('groups'=>'legal')),
new Assert\Length(array('groups'=>'legal', 'min'=>14, 'max'=>14))
)
)
);
$validator = Validation::createValidator();
$violations = $validator->validateValue($data, $myCollection, array(Constraint::DEFAULT_GROUP/* Default */));
$violations
变量提供:“ 数组[legalNo]:此值不应为空白 ”
我不明白为什么:
1 - 使用' NotBlank “legalNo约束。
2 - 为什么添加“ Array ”作为前缀。这里似乎有一个错误:
(@see line 189 Symfony \ Component \ Validator \ Validator.php :
$context->validateValue($value, $constraint, $groups);
ExecutionContext validateValue
函数的签名是:
public function validateValue($value, $constraints, $subPath = '', $groups = null)
所以看起来这些组被用作subpath
变量。
更新:
好的,似乎有一个WIP(working in process) pull request on this issue。
所以我的问题是:
Constraints\Collection
函数覆盖addConstraint
?)