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

私の知る限り、マスターリクエストのみのリスナーを登録することはできません。ただし、コードを 1 回だけ実行するために使用できる方法があります。次のコードをリスナーに配置します。

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 に答える