我遇到了 Symfony 2 验证器组件的问题。
我想使用条件验证组而不使用注释和对象。
目标是仅在该国家/地区为 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
变量给出:“ Array [legalNo] :此值不应为空”
我不明白为什么:
1 - 使用了“ NotBlank ”legalNo 约束。
2 - 为什么添加“数组”作为前缀。这里似乎有一个错误:
(@see 第 189 行Symfony\Component\Validator\Validator.php:
ExecutionContext函数$context->validateValue($value, $constraint, $groups);
的签名是: validateValue
public function validateValue($value, $constraints, $subPath = '', $groups = null)
所以似乎这些组被用作subpath
变量。
更新:
好的,似乎有一个关于这个问题的 WIP(正在进行中)拉取请求。
所以我的问题是:
- 如果没有此功能,我该如何进行条件验证?
Constraints\Collection
(也许通过用addConstraint
函数覆盖?)