2016-04-09 2 views
0

У меня есть форма в Symfony2, содержащая 2 типа подформы, представляющих 2 отношения в моей сущности. invoiceAddress требуется всегда, и он работает нормально, но я хочу, чтобы доставкаAddress оставалась необязательной только тогда, когда все входы доставкиAdress пусты. Когда я устанавливаю его как не требуемый набор symfony deliveryAddress как null, когда ничего не заполняется в форме, но когда заполняются некоторые поля, он не запускает проверку утверждений на этом объекте. Итак, что я пытаюсь достичь, это сказать symfony, когда форма целиком пуста, а затем установите для параметра deliveryAddress значение null, но когда что-то в форме установлено, выполните обычные проверки. Есть ли способ, как это сделать? Благодарю.Symfony2 FormType необязательный вообще или ничего

Тип моей формы выглядит так, и в контроллере у меня есть стандартная форма $ -> isValid condition.

$builder->add('invoiceAddress',new AddressType()) 
     ->add('deliveryAddress', new AddressType(),["required" => false]) 

AdressType содержит только некоторые примитивные отображения типов, как это:

$builder->add('firstName') 
     ->add('lastName')... 

А Адрес объекта:

/** 
* @Assert\NotBlank 
* @ORM\Column 
* @var string 
*/ 
private $firstName; 

/** 
* @Assert\NotBlank 
* @ORM\Column 
* @var string 
*/ 
private $lastName; 

ответ

1

Если вы субъекты установки и утверждения правильно это должно работать из коробки , Когда объект Address пуст, компонент формы возвращает null в качестве данных модели и устанавливает его на родительском. Когда свойство равно null, для этого свойства пропущена проверка. Он должен выглядеть примерно так:

class Order 
{ 
    /** 
    * @var Address 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Address") 
    * @ORM\JoinColumn(onDelete="CASCADE", nullable=false) 
    * 
    * @Assert\NotBlank() 
    * @Assert\Valid() 
    */ 
    private $invoiceAddress; 

    /** 
    * @var Address 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Address") 
    * @ORM\JoinColumn(onDelete="SET NULL", nullable=true) 
    * 
    * @Assert\Valid() 
    */ 
    private $deliveryAddress; 

    public function getInvoiceAddress() 
    { 
     return $this->invoiceAddress; 
    } 

    public function setInvoiceAddress(Address $address) 
    { 
     $this->invoiceAddress = $address; 
    } 

    public function getDeliveryAddress() 
    { 
     return $this->deliveryAddress; 
    } 

    public function setDeliveryAddress(Address $address = null) 
    { 
     $this->deliveryAddress = $address; 
    } 
} 
+0

@Assert \ Действительный() на доставкеРазмеры пород! Спасибо :) – Aldos

Смежные вопросы