2016-04-09 10 views
0

私は自分のエンティティで2つのサブフォームタイプを含む2つのサブフォームタイプを含むフォームをSymfony2に持っています。 invoiceAddressは常に必要ですが、正常に動作しますが、deliveryAddressのすべての入力が空の場合にのみdeliveryAddressをオプションにします。 私はそれを必要としないように設定すると、フォームに何も記入されていないときにdeliveryAddressをnullに設定しますが、フィールドがいっぱいになると、そのエンティティに対するアサーションの検証は実行されません。ですから、私が達成しようとしているのは、フォームが完全に空で、次にdeliveryAddressをnullに設定したときにsymfonyに伝えることですが、フォーム内の何かが設定されていれば、通常の方法でバリデーションを実行します。どのようにそれを行う方法がありますか?ありがとう。Symfony2 FormTypeオプションの全体または何もなし

私のフォームタイプはこのように見え、コントローラには私はstandart $ form-> isValid条件があります。

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

AdressTypeは、このような唯一のいくつかのプリミティブ型のマッピングが含まれています

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

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

答えて

1

正しくごセットアップエンティティとアサーションが、これは、箱から出して動作する必要がある場合:

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

とアドレスエンティティで

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 \ Valid()on the deliveryAddress rocks!ありがとうございました :) – Aldos

関連する問題