2012-03-12 48 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不能放在屬性或getters'? – greg 2013-05-06 19:55:49

+0

@greg,對於未來的訪問者,您必須將約束註釋放在類聲明的上面。 – keyboardSmasher 2014-02-13 15:15:37

+0

請在寫答案時更精確。 – 2014-03-16 17:39:15