.. index:: single: Controller; As Services コントローラをサービスとして定義する方法 ======================================== Symfony のガイドブックでは、:class:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller` クラスを拡張したコントローラの利便性を学んできました。もちろんこれでも十分ですが、コントローラはサービスとしても指定することができます。 サービスとして定義されたコントローラを問い合わせるには、シングルコロン(:)表記法を使用します。例えば、 ``my_controller`` というサービスを定義したとします。そして、そのサービスの ``indexAction()`` メソッドへフォワードしたいとします。その際には次のようにします。:: $this->forward('my_controller:indexAction', array('foo' => $bar)); ルーティングの ``controller`` の値の定義には、上記と全く同じ表記法を使用する必要があります。 .. code-block:: yaml my_controller: pattern: / defaults: { _controller: my_controller:indexAction } このようにコントローラを使用するには、サービスコンテナコンフィギュレーションに定義していなければなりません。詳細は、 :doc:`Service Container ` を参照してください。 一般的に、サービスとして定義されたコントローラを使用するには、ベースの ``Controller`` クラスの拡張はしません。ショートカットメソッドを使用するのではなく、直接必要なサービスとやりとりを行います。幸運なことに、これはとても簡単ですし、ベースの ``Controller`` クラス自体は、多くの共通の処理を実行する巨大なソースに過ぎないのです。 .. note:: サービスとしてコントローラを指定することは、さらにアドバンテージがあります。それは、コントローラに渡された全てのコントローラ、もしくはサービスは、サービスコンテナコンフィギュレーションを介して変更することができることです。これは、オープンソースバンドルなどたくさんの異なるプロジェクトで使われるバンドルを開発する際に、特に便利です。そのため、実際にあなたがサービスとしてコントローラを指定することがなくても、オープンソースのバンドルで使われているのを見ることでしょう。 .. 2011/10/24 ganchiku 7ca7eadb46c1e44996b29e331026a6bc3f61e620