2017-11-16 7 views
1

私はこのような構図パターンでフォームを作成したい: https://symfony.com/doc/current/form/inherit_data_option.htmlsymfonyの3 - サブフォームと要素名

私はsymfonyの3

を使用して、それが働いています。私は単一のオブジェクトのような各要素を持ち、これを追加します。

が、最終的には私のフォーム要素名は、name属性でサブフォームずにフラットな構造にする方法

form[subform][element] 

のような名前を持っていますか?

use AppBundle\Base\Form\NickType; 
use AppBundle\Base\Form\MailType; 
use AppBundle\Base\Form\PassType; 
use AppBundle\Base\Form\UserType; 


class RegisterType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('nick', NickType::class) 
      ->add('mail', MailType::class) 
      ->add('password', PassType::class) 
      ->add('repeat_password', PassType::class) 
(etc...) 

とSINGLE ELEMENT

class NickType extends AbstractType 
{ 

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

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'inherit_data' => true 
     )); 
    } 

} 
+0

を経由して、そう、あなたにformTypeをご提示ください。 –

+0

@StephanVierkant私はコードを更新しました。返信ありがとうございます。 – taro

答えて

0

それだけTextTypeを継承する場合は、NickTypeを定義する必要はありません。

class RegisterType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('nick', TextType::class) 
     ; 
(etc...) 

フォームフィールドを再利用したい場合は、あなたがCustom Form Field Typeを作成する必要があります:

class NickType extends AbstractType 
{ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      //... 
     )); 
    } 

    public function getParent() 
    { 
     return TextType::class; 
    } 
} 

することができますあなたはあなただけ行うことができますNickTypeMailTypeなど

を削除することができます要素名からform[]を削除しますが、これを削除することは実際にはお勧めできません。フォームデータを入力する要求を読み取ったときに、フォーム名でフォームを識別できるためです。 (via

次に、あなたのフィールド名 がちょうど形になり、空にすること根フォームの名前を設定することができます。

// the first argument to createNamedBuilder() is the name 
$form = $this->get('form.factory')->createNamedBuilder(null, 'form', $defaultData) 
    ->add('from', 'date', array(
     'required' => false, 
     'widget' => 'single_text', 
     'format' => 'dd.MM.yyyy' 
    )); 

via

+0

はい、将来は多くの形でニック要素を使用します。 フィールドごとに1つのオブジェクトが必要な理由です。 1つの場所で私は妥当性検査のルールなどを持っています... – taro

+0

私はそれに応じて私の質問を更新しました。 –

+0

それはいいですが、私は得ました: name = "register [nick]" 最後に、name = "nick"を取得したいと思います。 ありがとうございました! – taro