1

Symfony2でSensioGeneratorBundleを使用していくつかのエンティティとCRUDを生成し、生成されたCRUDをRESTAPIに変換しています。フィールド名に問題があります...カスタムフィールド名が必要でしたが、SymfonyのbindRequestは正しく機能して検証するために「acme_demobundle_tabletype_field」を期待していますが、「フィールド」だけが必要です。

カスタムフィールド名を使用してPOSTし、コントローラーに正しい値を認識してバインドさせるにはどうすればよいですか?例えば:

役職

バナナ

b:チョコレート

symfonyマップ:

a=>タイトル

b=>コンテンツ

4

2 に答える 2

5

あなたの質問には2つの部分があります。まず、フィールド名とフィールド名自体の前にプレフィックスを付けます。

プレフィックスを削除するには、にいる場合は@m2mdasで説明されているトリックを使用します2.1。オンになっていない場合は、を使用してフォームを作成し、フォームを作成するときに空の名前を付けるの2.1が最善の策です。createNamedこのようなもの:

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

このフォームをテストしたことはありませんが、名前が空の場合はフィールドのプレフィックスが削除2.0.xされることを確認できます。2.1

サービスformFactoryのインスタンスはどこにありますか( )。FormFactory@form.factory

フィールドには、カスタム名を使用して、プロパティをマップする場所をSymfonyに指示できます。そのためには、property_pathオプションを使用します。これは、プロパティをデフォルトのパスではなくこのパスにマップするようにsymfonyに指示します。ここでは、フォームタイプを定義するときに、フォームタイプでどのように使用する必要がありますか。

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

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

これを使用して、SymfonyaがPOSTデータからフィールドを受信すると、それをプロパティにマップしtitle、フォームがレンダリングされるときにその逆を行います。オブジェクトには、setTitleメソッドとメソッドが必要setContentです。

お役に立てれば。

よろしく、
マット

于 2012-04-26T03:36:57.143 に答える
1

githubを調べました。このPRによると、空の親名を設定できます。したがって、フォーム型クラスでは、getNameメソッドで空の文字列を返すだけです。

于 2012-04-25T22:00:54.187 に答える