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
?)