2012-03-12 13 views
4

Symfony2でエンティティ全体の複雑なカスタム検証を行う必要があります。Symfony2エンティティ全体に対する検証

例:私のentityは多くのsubentitiesがあり、すべてのsubentitiesは、私の知る限り尋できるよう100

に合計しなければならない、Symfony2のが唯一の特異フィールドを検証バリ?

答えて

6

答えははいです。パラメータではなくオブジェクトに対して制約を指定し、クラスレベルの制約である制約を指定する必要があります。幾分冗長例は、このです:

config.yml

validator.my.uniquename: 
    class: FQCN\To\My\ConstraintValidator 
    arguments: [@service_container] 
    tags: 
    - { name: validator.constraint_validator, alias: ConstraintValidator } 

validation.yml

FQCN\To\My\Entity: 
    constraints: 
    - FQCN\To\MyConstraint: ~ 

(この例では、制約のない引数)

マイ制約

namespace FQCN\To; 

use 
    Symfony\Component\Validator\Constraint 
    ; 

/** 
* @Annotation 
*/ 
class MyConstraint extends Constraint 
{ 
    public $message = 'Constraint not valid'; 

    public function validatedBy() 
    { 
    return 'ConstraintValidator'; 
    } 

    public function getTargets() 
    { 
    # This is the important bit. 
    return self::CLASS_CONSTRAINT; 
    } 
} 

My ConstraintValidator

class MyConstraintValidator extends ConstraintValidator 
{ 
    protected $container; 

    function __construct($container) 
    { 
    $this -> container = $container; 
    } 

    function isValid($object, Constraint $constraint) 
    { 
    # validation here. 
    return true; 
    } 
} 
+0

制約条件MyBundle \ Validator \ Constraintを解決するためのヒントは、プロパティやゲッタにはできません。 – greg

+0

@gregと将来の訪問者のためには、ABOVEという制約注釈をクラス宣言に入れなければなりません。 – keyboardSmasher

+0

答えを書くときの精度を上げてください。 –

関連する問題