2016-09-10 2 views
1

"inherit_data"を使用してコード複製を減らすために、symfonyのドキュメントにその例を適用しました。inherit_dataを使用するときに空のルートフォーム名(子フォーム)を有効にする方法

http://symfony.com/doc/current/form/inherit_data_option.html

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    // ... 

    $builder->add('foo', LocationType::class, array(
     'data_class' => 'AppBundle\Entity\Company' 
    )); 
} 

それは良い作品が、私はで検索フォームにこのexempleを使用するとき、私はこのようなURLを取得方法GET:

foo%5Baddress%5D=some+address&foo%5Bzipcode%5D=5000&foo%5Bcity%5D=paris&foo%5Bcountry%5D=france 

をし、私がしたいです次のようなURL:

address=some+address&zipcode=5000&city=paris&country=france 

どうすればいいですか?で?

答えて

1

フラットな(ネストされていない)フォームフィールド名が必要です。技術的な詳細については、this issuepull requestを参照してください。

私はいくつかの例を見つけましたhere。 Symfony 2を使用している場合は、this exampleも役に立ちます。私は2つを見つけたrelatedquestions

解決策1:createNamedメソッドを使用してフォームを作成します。

createNamedメソッドを使用してフォームを作成し、最初のパラメータ( $namenullに設定します。

$form = $this->get('form.factory')->createNamed(null, new MyFormType(), $dataObject, $formOptions); 

ソリューション2:変更

またあなたにformType、あなたはFormTypeへのgetBlockPrefix方法を使用することができます名前をnull

class MyFormType extends AbstractType 
{ 
    ... 

    /** 
    * This will remove formTypeName from the form 
    * @return null 
    */ 
    public function getBlockPrefix() { 
     return null; 
    } 
} 
+0

に設定してくださいBaseFormTypeではうまく動作しますが、子フォームである "LocationType"ではうまく動作しません。 – hous

関連する問題