5

だから、私はこれらのリスナーを理解しようとしていますが、symfony サイトでそれらに関する情報を見つけるのに問題があります..

最初は、ページが読み込まれるたびにトリガーされるリスナーを作成したいと考えていました...システム全体のパフォーマンスに悪影響を与える可能性があると考えたので、/ および /otherpage

しかし、繰り返しになりますが、リスナーをどこから始めればよいかについての情報を見つけるのに問題があります。どんな助けにも感謝します..このリスナーが行うことはすべて、Doctrineを使用してデータベースをチェックし、見つかったものに基づいてセッションを設定することです..

繰り返しますが、助けや提案をいただければ幸いです。ありがとう。

4

1 に答える 1

10

サブドメインが変更されていないことを確認するために、同様のことを行います。次のように、構成ファイルにリスナーをサービスとして配置できます。

services:
    page_load_listener:
        class: Acme\SecurityBundle\Controller\PageLoadListener
        arguments: 
            security: "@security.context", 
            container: "@service_container"
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 64 }

優先度がどのように機能するかは正確にはわかりませんが、設定が高すぎると、アプリケーションの残りの部分よりも先に実行されないことがわかりました。もう少し研究することは、私のやることリストにあります。

リスナーがどのように見えるかの例を次に示します。

namespace Acme\SecurityBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class PageLoadListener extends controller
{
    private $securityContext;
    protected $container;
    protected $query;

    public function __construct(SecurityContext $context, $container, array $query = array())
    {
        $this->securityContext = $context;
        $this->container = $container;
        $this->query = $query;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {       
        //if you are passing through any data
        $request = $event->getRequest();

        //if you need to update the session data
        $session = $request->getSession();              

        //Whatever else you need to do...

    }
}

特定のページでのみ実行するように設定する最良の方法はわかりませんが、ルートを確認し、ルートが設定したものと一致する場合にのみデータベースをヒットすることをお勧めします。

それがあなたを始めることを願っています!

グレッグ

于 2012-05-29T22:33:07.920 に答える