Symfony2でコントローラをサービスに登録して使用する方法

NiseExampleBundleというバンドルの中のNiseControllerというコントローラをサービスに登録してNabeControllerの中で使用したいとする.

サービス定義部分
src/Nise/ExampleBundle/Resources/config/services.yml

  1 parameters:
  2     nise_example.nise.class: Nise\ExampleBundle\Controller\NiseController
  3
  4 services:
  5     nise_example.nise:
  6         class: %nise_example.nise.class%
  7         calls:
  8             - [ setContainer [@service_container] ]

定義したサービスを呼び出す部分
src/Nise/ExampleBundle/Controller/NabeController.php

 43     $controller = $this->get('nise_example.nise');

これで $controller を使えばいい.

以下備考.

services.yml の 7, 8 行目が無いとコントローラでgetした際にnullが返ってくる.
@service_container は別の部分で定義されているサービス.
おそらく下記部分で定義されているものと思われる.

vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml

 38 
 39         <service id="service_container" synthetic="true" />
 40