2017-08-25 2 views
1

I持ってフォームクラス:$アドレス値を検証する方法を今すぐassociactionでエンティティを検証する方法は?

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

:私は$アドレスフィールドが関連であるカスタマーエンティティを検証するためにそれを使用

... 
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? 
} 
... 

?今私は(私は驚かなかったものを)を取得:

期待与えられた「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が動作します。だから、私はエンティティをアドレスに変換するために、トランスフォーマが必要ですか?または$ fomr-> submit(...)の前にそれを取得しますか?私は正しい? –

+0

あなたはそのようなことを行う必要はありません。あなたの協会は伝統的な外部キー整数ではなく、完全なエンティティとして扱われています。したがって、データトランスフォーマーは必要ありません。 –

+0

ご回答ありがとうございます。あなたが正しいです。とにかく、私は例外で終わった: "複合フォームは、提出時に配列またはNULLを期待する"。私は今はあきらめて、明日これを解決しようとします。 –

関連する問題