How to define controllers as services in Symfony2
在symfony2中如何将controller定义为一个service ,并在路由配置文件中使用定义的控制器服务呢?其实很简单,就像把其他的类定义为服务一样,直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
namespace Acme\AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; class DemoController extends Controller { public function indexAction() { return new Response('Controller as a service.'); } } |
首先定义一个controller控制器,然后在你项目中的 services.xml (src/Acme/AppBundle/Resources/config/services.xml) 中添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> |
如何在路由配置文件里面使用定义好的控制器服务呢? 其实也很简单,在你的项目的路由配置routing.yml ( src/Acme/AppBundle/Resources/config/routing.yml )文件里面,添加如下配置即可:
1 2 3 4 5 6 7 8 9 10 11 |
acme_app_index: path: / defaults: # 注意: 此处的 acme_app.controller.demo_controller 就是上面 services.xml # 里面定义的那个 id 名,后面跟的 indexAction 就是需要返回数据的操作 _controller: acme_app.controller.demo_controller:indexAction |
如果你需要在其他控制器或者类中需要使用定义好的这个控制器服务,只需要将symfony的容器注入到相应的类里面,然后这样获得即可:
1 2 3 4 5 6 7 8 9 |
public function getAcmeAppDemoController() { // 此处就是定义好的服务 $acmeDemoController = $this->container->get('acme_app.controller.demo_controller'); } |
No Comments