3

プロジェクトの要件により、メッセージに加えて、すべての制約違反に数値コードを追加する必要があります。クラスを調べたConstraintViolationところ、実際に$codeプロパティを実装していることがわかったので、それは私のニーズに最適です...注釈でこのコードを指定する簡単な方法がないことを除いて。

たとえば、Email制約またはその親クラスがどのように実装されているかを見ると、そのコードの兆候はどこにもないため、注釈でそれを定義することはできません。

バリデーターは、コード自体である に$code5 番目のパラメーターを渡さないため、コーダーが を設定することも禁止します。addValidation

$this->context->addViolation($constraint->message, array('{{ value }}' => $value));

だから、私の質問は簡単です: 何かが足りないのですか? 苦痛ではない注釈を介して制約違反コードを設定する方法はありますか? 理想的には、次のようなことをしたいと思います。

/**
 * @Assert\NotBlank(code=400)
 * @Assert\Email(code=401)
 */
protected $email;

プロパティ (有効な注釈コードであるため) とすべての制約バリデーターをConstraint.php追加して 5 番目のパラメーターを渡すように編集するのは、ひどい考えのようです!$codeaddviolation

もちろん、独自のバリデーターを実装することもできますが、定義済みのバリデーターのセットを用意する意味は何ですか? たった一行の変更です。

4

1 に答える 1

0

あなたは少し間違っていると思います。バリデーターの code プロパティは、注目すべきものではありません。非常に単純なクラスである独自の Validator 制約を作成する必要があると思います: https://github.com/symfony/Validator/blob/master/Constraints/Choice.php

そして、アノテーションまたは PHP を介して設定できるパブリック コード プロパティを投げ込むだけです。その余分なプロパティだけで、新しい検証サービスは必要ありません。このプロパティは、制約が構築されるときに自動的に追加されます。

https://github.com/symfony/Validator/blob/master/Constraint.php

カスタム制約の作成方法の詳細は次のとおりです。

http://symfony.com/doc/2.1/cookbook/validation/custom_constraint.html

于 2013-03-06T07:02:56.233 に答える