0

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

4

1 回答 1

3

据我所知,不可能只为主请求注册一个监听器。但是有一种方法可以让你的代码只运行一次。将以下代码放入您的侦听器中:

public function onKernelRequest(GetResponseEvent $event)
{
    if (HttpKernelInterface::MASTER_REQUEST == $event->getRequestType()) {
        // place your code here so it will run only for master requests

        // ...
    }
}
于 2013-10-31T20:29:50.187 回答