开发我的Symfony2应用程序,我想在Ruby on Rails中有类似的方法,可以在所有控制器中使用方法。在RoR控制器中,只需在ApplicationController
之后继承,这就是你放置所有方法的地方。但Symfony的方式是什么,这里有什么好的做法?
我想要的功能实际上很简单,类似于:
public function showAction()
{
$user = $this->container->get('security.context')->getToken()->getUser();
}
我可以在这里加载当前用户,我希望在每次操作之前终止此函数,当然不会将代码复制到每个控制器中。
答案 0 :(得分:6)
您可以使用此服务。
<强>的Acme / DemoBundle /为MyService / MyService.php 强>
<?php
namespace Acme/DemoBundle/MyService
class MyService {
public function myFunction(){
[...]
}
}
<强>的Acme / DemoBundle /资源/配置/ services.yml 强>
services:
my_service:
class: Acme/DemoBundle/MyService/MyService
或.xml版本
<强>的Acme / DemoBundle /资源/配置/ services.xml中强>
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
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"
>
<services>
<service id="my_service" class="Acme\DemoBundle\MyService\MyService">
</service>
</services>
</container>
然后在控制器中
<强>的Acme / DemoBundle /控制器/ MyController.php 强>
$this->container->get("my_service")->myFunction();
要使其在所有捆绑包中都可用,只需相应地更新每个捆绑包的服务配置文件。