您好我有一个事件监听器,它检查子域以确定我的Symfony2应用程序中的租户。服务配置为:
services:
acme.tenant.tenantlistener:
class: Acme\TenantBundle\Services\TenantListener
arguments: [@doctrine.orm.entity_manager]
tags:
- { name: kernel.event_listener, event: kernel.request, method: checkTenant }
问题是每次加载任何控制器操作时,此侦听器都会运行。因此,如果我从Twig调用控制器方法,它会运行,从而导致数据库上出现许多不必要的命中。有没有办法让这个监听器在主请求的最开始只运行一次?谢谢!
答案 0 :(得分:3)
据我所知,只能为主请求注册一个监听器。但是有一种方法可以让你的代码只运行一次。将以下代码放在监听器中:
public function onKernelRequest(GetResponseEvent $event)
{
if (HttpKernelInterface::MASTER_REQUEST == $event->getRequestType()) {
// place your code here so it will run only for master requests
// ...
}
}