0

フォームのフォーム クラスを作成していますが、それらを「拡張」する方法がわかりません。

たとえば、CustomerTypeフォーム クラスとEmailTypeフォーム クラスがあります。EmailTypeに直接追加できますCustomerType

$builder->add('emails', 'collection', array(
    'type'         => new EmailType(),
    'allow_add'    => true,
    'by_reference' => false
));

CustomerTypeしかし、フォーム クラスに顧客情報のみが含まれるように、コントローラーでこれを行うことをお勧めします。ユーザーが詳細のみを編集できるようにしたい場合もあれば、詳細とその顧客に関連付けられたオブジェクトのCustomer両方を編集できるようにしたい場合もあるため、これはよりモジュール化され再利用可能であると感じています。(たとえば、最初のケースでは顧客の作業指示書を表示するとき、2 番目のケースでは新しい顧客を作成するとき)。CustomerEmail

これは可能ですか?私はその線に沿って何かを考えています

$form = $this->createForm(new CustomerType(), $customer);
$form->add('emails', 'collection', ...)

私のコントローラーで。

4

1 に答える 1

0

フォームが作成されるときに、フォームにコレクションを埋め込む必要があるかどうかを示すオプション (「with_email_edition」など) をフォームに渡すことができます。

コントローラーで:

$form = $this->createForm( new CustomerType(), $customerEntity, array('with_email_edition' => true) );

形式:

setDefaultOptions にオプションを追加するだけです。

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
     $resolver->setDefaults(array(
                'with_email_edition' => null,
            ))
            ->setAllowedValues(array(
                'with_email_edition' => array(true, false),
            ));
}

次に、「buildForm」でこのオプションの値をチェックインし、それに基づいてフィールドを追加します。

public function buildForm(FormBuilderInterface $builder, array $options)
{
     if( array_key_exists("with_email_edition", $options) && $options['with_email_edition'] === true )
     {
          //Add a specific field with  $builder->add for example
     }
}
于 2013-03-19T10:45:25.570 に答える