2012-04-25 7 views
1

Symfony2でSensioGeneratorBundleを使っていくつかのエンティティとCRUDを生成しました。生成されたCRUDをREST APIに変換しています。私はフィールド名に問題があります。カスタムフィールド名が必要でした。symfonyのbindRequestは "acme_demobundle_tabletype_field"が正しく動作し、検証するために "フィールド"だけを持っています。Symfony 2のRESTコントローラ:フィールド名の扱い方は?

カスタムフィールド名を使用してPOSTを行い、コントローラーが正しい値を理解してバインドする方法を教えてください。たとえば、次のように

POST

:バナナ

B:チョコレート

symfonyのマップ:

=>タイトル

B =>コンテンツ

+0

。私が見つけた最も近いものはカスタム[param converter](http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html)を作成することです。 –

答えて

5

ご質問には2つの部分があります。最初に接頭辞がフィールド名の前に付けられ、フィールド名自体が先頭に付けられます。

接頭辞を取り除くには、2.1にいる場合@ m2mdasで説明されているテクニックを使用します。 2.1でない場合は、createNamedを使用してフォームを作成し、フォームを作成するときに空の名前を付けることをお勧めします。このような何か:

$this->formFactory->createNamed(new CustomType(), '', $data, $optionsArray); 

2.0.xでこのフォームをテストしていないが、空の名前を持つことが、フィールドのプレフィックスを削除することを2.1で確認することができないでください。

ここで、formFactoryFormFactoryサービス(@form.factory)のインスタンスです。

フィールドの場合、カスタム名を使用して、プロパティをマップする必要がある場所をSymfonyに伝えることができます。そのためには、property_pathオプションを使用します。これによりsymfonyはデフォルトパスの代わりにこのパスにプロパティをマップします。ここでは、タイプを形成するには、あなたがそれを定義するとき、あなたがそれを使用する方法:symfonyはPOSTデータからフィールドaを受け取ったときに、これを使用して

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('a', 'text', array(
     'property_path' => 'title', 
    )); 

    $builder->add('b', 'text', array(
     'property_path' => 'content', 
    )); 
} 

は、それが財産titleとその逆にマップしますフォームがレンダリングされます。あなたのオブジェクトには、setTitleメソッドとsetContentメソッドが必要です。

これが役に立ちます。私にはわからない

よろしく、
マット

+0

素晴らしいマット、ありがとう。私はRESTコントローラでFormsをほぼなくなり、手作業で検証していました。ありがとう! :D – vinnylinux

1

I githubを見た。 this PRによれば、空の親の名前を設定できます。だからあなたのフォーム型クラスでは、ちょうどgetNameメソッドで空の文字列を返します。

+0

私の名前は無効だと言われています。私は戻ってきている。 – vinnylinux

+0

2.1バージョンを使用していますか? –

+0

異なるフィールド名とカスタムマッピングを持つ方法はありませんか? – vinnylinux

関連する問題