2016-04-09 15 views
0

Symfony2'de, 2 ilişkisini temsil eden 2 alt form türü içeren formum var. invoiceAddress her zaman gereklidir ve Tamam çalışır, ancak deliveryAddress'in yalnızca deliveryAdress'in tüm girdileri boş olduğunda isteğe bağlı olmasını istiyorum. İstenmeyen symfony gibi ayarlandığında, form hiçbir şey doldurulmadığında boş değer olarak gönderilir, ancak bazı alanlar doldurulduğunda, o varlıktaki önermelerin doğrulanmasını çalıştırmaz. Yani, elde etmeye çalıştığım şey, formun tamamı boş olduğunda ve sonra deliveryAddress öğesinin null olarak ayarlandığı, ancak formdaki bir şey ayarlandığında normal olarak doğrulamaları çalıştırması gerektiğinde symfony anlatılır. Bunu yapmanın yolu var mı? Teşekkürler.Symfony2 FormType isteğe bağlı tam veya hiç

Form formum böyle görünüyor ve denetleyicide standart $ form-> isValid koşul var.

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

AdressType böyle sadece bazı ilkel tipi eşleştirmeleri içerir:

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

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

cevap

1

doğru kurulum kurum ve iddialar bu kutunun dışında çalışması gerekir ise:

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

Ve Adres varlıktaki

. Address nesnesi boş olduğunda, form bileşeni null model verileri olarak dönecek ve üst öğeye ayarlayacaktır. Bir özellik null olduğunda, bu özellik için doğrulama atlanır. Şöyle bir şeye benzemelidir:

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 \ Valid() Teşekkür ederim :) – Aldos