租户监听器在Symfony2中加载一次

时间:2013-10-31 20:20:01

标签: symfony

您好我有一个事件监听器,它检查子域以确定我的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调用控制器方法,它会运行,从而导致数据库上出现许多不必要的命中。有没有办法让这个监听器在主请求的最开始只运行一次?谢谢!

1 个答案:

答案 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

        // ...
    }
}