目前我正在使用 Symfony2,它是一个很棒的框架。
我使用 SpringMVC,它具有“拦截器”的概念,它可以捕获对任何“控制器”的请求,并允许进行例如检查是否知道用户是否已登录。
是否有任何路由器方式的注释可以与 Symfony2 做类似的事情。
提前致谢。
目前我正在使用 Symfony2,它是一个很棒的框架。
我使用 SpringMVC,它具有“拦截器”的概念,它可以捕获对任何“控制器”的请求,并允许进行例如检查是否知道用户是否已登录。
是否有任何路由器方式的注释可以与 Symfony2 做类似的事情。
提前致谢。
您可以附加事件侦听器以响应框架事件。看一眼:
http://symfony.com/doc/current/cookbook/service_container/event_listener.html
您可以订阅许多事件,所有这些事件都可以在文档中找到:
http://api.symfony.com/2.1/Symfony/Component/HttpKernel/KernelEvents.html
可能您正在寻找 REQUEST 事件,它应该类似于:
<?php
namespace Acme\DemoBundle\Listener;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class Listener
{
/**
* @var \Symfony\Component\DependencyInjection\ContainerInterface
*/
private $router;
private $service_container;
public function __construct(\Symfony\Component\Routing\Router $router, $service_container) {
$this->router = $router;
$this->service_container = $service_container;
}
public function onKernelRequest(GetResponseEvent $event) {
// DO STUFF
}
}
在 services.xml 上:
<service id="max4.sms.listener" class="Acme\DemoBundle\Listener\Logger">
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
<argument type="service" id="router" />
<argument type="service" id="service_container" />
</service>
您定义您正在收听的事件
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
注入__construct()方法的参数(参见http://symfony.com/doc/current/components/dependency_injection/introduction.html):
<argument type="service" id="router" />
<argument type="service" id="service_container" />