簡體   English   中英

Symfony2事件監聽器

[英]Symfony2 event listener

所以,我正在試圖弄清楚這些聽眾,但我在symfony網站上找到關於他們的任何信息時遇到了問題。

最初,我想創建一個會在每個頁面加載時觸發的偵聽器...我認為這可能對整個系統性能有害,所以我想它只觸發:/和/ otherpage

但同樣,我在找到有關如何開始使用監聽器的任何信息時遇到了問題。 任何幫助表示贊賞..所有這些聽眾都會這樣做,正在使用Doctrine來檢查數據庫並根據它找到的內容設置會話。

再次,任何幫助或建議表示贊賞。 謝謝。

我做類似的事情檢查子域名沒有改變。 您可以將偵聽器作為服務放入配置文件中,如下所示:

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...

    }
}

我不確定將其設置為僅在某些頁面上運行的最佳方式,但我最好的猜測是檢查路由並且只在路由匹配您設置的任何內容時才點擊它。

希望能讓你入門!

格雷格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM