2

我遇到了 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.phpExecutionContext函数$context->validateValue($value, $constraint, $groups); 的签名是: validateValue

public function validateValue($value, $constraints, $subPath = '', $groups = null)

所以似乎这些组被用作subpath变量。

更新:

好的,似乎有一个关于这个问题的 WIP(正在进行中)拉取请求

所以我的问题是:

  • 如果没有此功能,我该如何进行条件验证?Constraints\Collection(也许通过用addConstraint函数覆盖?)
4

0 回答 0