1

メソッドを介してコントローラーからフォームに変数を渡す方法を理解していますが、 createFormcreateFormと呼ばれるフォームに埋め込まれたフォームにその値を渡す必要がある場合はどうなりますか?埋め込まれたフォームのどこでもcreateFormを明示的に呼び出すことはありませんが、その値をどのように取得するのでしょうか。私が渡そうとしている値はサービスを通じて利用可能であることに注意する価値がありますが、私はコントローラーにいないため、電話をかけることができません。参考までに、これは親フォームに値を取得する方法です。コンストラクターではなく、 createFormメソッドを使用して取得する方法に注意してください。$this->get('serviceName')->getValue()

//in a controller
$form = $this->createForm(new FormType(), $formObject, array('value' => $value));
4

1 に答える 1

2

サービス(およびパラメーター)を注入できないのは、コントローラーにいないからではありません。特に、各タイプがサービスになるタイプに。もちろん、このメソッドはデフォルトでは利用できない$this->get('serviceName')->getValue()ため、直接行うことはできません。getただし、サービスをフォーム タイプに挿入することはできます。サービスを注入する方法については、ここで依存性注入について回答した別の質問を参照してください。

型をサービスに変換して、依存関係と同時に値を注入できるようにする方法について説明しているこのクックブック セクションを参照してください。

なんらかの理由でタイプをサービスに変換できない場合、必要なことは、オプションを に渡し、FormTypeそれを読み取り、そのvalueオプションを組み込みタイプに渡すことです。これは引き渡しスタイルの設計のようなものです。すべてのオプションをメイン タイプに渡します。メイン タイプはそれらの一部を各サブ タイプに渡しますが、各サブ タイプはそれらを独自のサブ タイプに渡します。繰り返しになりますが、オプションの読み方とカスタム フォーム タイプでの使用方法については、この [クックブック レシピ] を参照してください。

結論として、タイプをサービスに変換する方が簡単だと思います。

これがお役に立てば幸いです。

よろしく、
マット

于 2012-04-23T02:36:42.200 に答える