2016-11-29 7 views
3

В Symfony 3 его не разрешено использовать cascade_validation. Поэтому вам нужно сделать Assert для типов. Но это не сработает, форма действительна, даже если поле BLANK, но Assert сказал NOtBlank. У меня есть класс Участники, и я хочу проверить Adults ArrayCollection при проверке модели участника.Symfony: Как использовать Assert/Validation для ArrayCollection

//Participant Model 
    /** 
     * @var ArrayCollection 
     * @Assert\All({ 
     *  @Assert\Type(type="My\WebsiteBundle\Model\Adult"), 
     * }) 
     */ 
     protected $adults; 

//Adult Model 
    class Adult 
    { 
     /** 
     * @var string 
     * 
    * @Assert\NotBlank() 
    */ 
    protected $salutation; 

    /** 
    * @var string 
    * 
    * @Assert\NotBlank() 
    */ 
    protected $firstname; 

    /** 
    * @var string 
    * 
    * @Assert\NotBlank() 
    */ 
    protected $lastname; 

ответ

3

Вы должны использовать Действительный assetion, как описано здесь http://symfony.com/doc/current/reference/constraints/Valid.html в док

В качестве примера:

/** 
    * @var ArrayCollection 
    * 
    * @Assert\All({ 
    *  @Assert\Type(type="My\WebsiteBundle\Model\Adult"), 
    * }) 
    * @Assert\Valid 
    */ 
    protected $adults; 

Надежда эта помощь

+0

я уже читал это, нет ответа сделайте это с помощью ArrayCollection. – Zwen2012

+0

Привет @ Zwen2012 этот валидатор имеет параметры с именем 'traverse'. Из документа: _ Если это ограничение применяется к свойству, содержащему массив объектов, то каждый объект в этом массиве будет проверяться только в том случае, если для этого параметра установлено значение true._ – Matteo

+0

Хорошо, можете ли вы привести пример? И это так?/** * @var ArrayCollection * @Assert \ All ({@ Assert \ Траверса(), * @Assert \ Тип (тип = "My \ WebsiteBundle \ Model \ Checkout \ Adult"), *}) */ защищено $ взрослыми; – Zwen2012