2

Symfony 2 Validator コンポーネントに問題がありました。

アノテーションやオブジェクトを使わずに条件付き検証グループを使いたい。

目標は、国が 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 line 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?)
4

0 に答える 0