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