4

検証チェーンの最初のエラーで symfony2 の検証を強制的に停止させる何らかのフラグ/オプションがあるかどうか、情報を探しています。たとえば、emailフィールドに 3 つのバリデーターがあります。

email:
    - NotBlank: { groups: [ send_activation_email ] }
    - Length: { min: 6, max: 80, charset: UTF-8, groups: [ send_activation_email ] }
    - Email: { groups: [ send_activation_email ] }

最初のエラーの後に検証を停止したい。どうすればそれを達成できますか?同様の質問を読みました:

Symfony2 : 最初のエラーで検証が停止する

Symfony2 で制約の失敗時に検証を停止する方法

Symfony-2 が複数の検証エラー メッセージを表示する

最後の1つは非常に優れていますが、複数のバリデーターがある場合、毎回検証グループを使用せずにこれを行う方法はありますか? Symfony 2.2 にはこのためのフラグまたはオプションがあるとどこかで読みましたが、バージョン 2.2.1 でそのようなオプションが見つかりません。

4

2 に答える 2

3

Chainその目的でバリデーターを使用できます: https://gist.github.com/rybakit/4705749

プレーンな PHP での例を次に示します。

<?php

use Symfony\Component\Validator\Constraints\Date;
use Symfony\Component\Validator\Constraints\Type;
use Acme\Validator\Constraints\Chain;

$constraint = new Chain([new Type('string'), new Date()]);

XML の場合:

<!-- src/Acme/DemoBundle/Resources/config/validation.xml -->

<class name="Acme\DemoBundle\Entity\AcmeEntity">
    <property name="date">
        <constraint name="Acme\Validator\Constraints\Chain">
            <option name="constraints">
                <constraint name="Type">
                    <option name="type">string</option>
                </constraint>
                <constraint name="Date" />
            </option>
        </constraint>
    </property>
</class>

Chainただし、次のようなネストされた制約が必要な場合は注意してください。

<?php

$constraint = new Chain([
    new Callback(...),
    new Chain([new Type('string'), new Date()]),
]);

validator.validator_factory現在の実装でネストされた制約を処理する際の問題を修正するには、symfony サービスをオーバーライドする必要があります: https://github.com/symfony/Validator/blob/fc0650c1825c842f9dcc4819a2eaff9922a07e7c/ConstraintValidatorFactory.php#L48

要点からファイルを参照して、NoCacheConstraintValidatorFactory.php解決方法を理解してください。

于 2014-03-07T11:14:29.973 に答える
0

Symfony 2.3 では、グループ シーケンスを使用してこれを行うことができます(ただし、グループ シーケンスのフォーム サポートにはむらがあるかもしれません)。

于 2014-02-12T04:28:44.270 に答える