2017-08-25 72 views
1

我有窗體類如何使用關聯驗證實體?

... 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('name', TextType::class); 
    $builder->add('surname', TextType::class); 
    $builder->add('address', IntegerType::class); // write custom field type? 
} 
... 

我用它來驗證客戶實體,其中$地址欄是關聯關係:

... 
/** 
* @ORM\OneToOne(targetEntity="Address") 
* @Assert\CustomAddress // write this custom validation constraint? 
*/ 
private $address; 
... 

現在如何驗證$地址值?現在我得到(什麼也沒有讓我感到吃驚):

預期類型的​​賦予「的appbundle \實體\地址」,「串」的說法

回答

1

你想使一個形式爲您地址實體,是這樣的:

use AppBundle\Entity\Address; 
// ... 

class AddressType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('address1', TextType::class); 
     $builder->add('city', TextType::class); 
     // ... 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => Address::class, 
     ]); 
    } 
} 

然後更新您的CustomerType使用這個類,像:

use AppBundle\Form\Type\AddressType; 

// ... 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('name', TextType::class); 
    $builder->add('surname', TextType::class); 
    $builder->add('address', AddressType::class); 
} 

然後,您的Address實體應該自動驗證,而不需要自定義驗證約束。

+0

Okey的作品。所以現在我需要寫變換器從int轉換爲地址實體?或者在$ fomr-> submit(...)之前獲取它?我是對的? –

+0

你不應該這樣做 - 你的關聯正在被視爲一個完整的實體,而不是傳統的外鍵整數。所以你根本不需要數據轉換器。 –

+0

好的。謝謝你的回答。你是對的。無論如何,我結束了異常:「複合形式期望數組或提交NULL」。我現在放棄了,明天我會試着解決這個問題。 –