2014-11-04 20 views
0

我正在嘗試計算用戶在登錄期間訪問了多少頁。Symfony2 count訪問過的網站每個用戶

因此,我創建了一個Service,它正在監聽Kernel::TERMINATE事件,每當用戶轉到我係統內的其他站點時應增加計數器。

class ActivityListener implements EventSubscriberInterface { 
    private $doctrine; 
    private $session; 

    public function __construct(Registry $doctrine, Session $session){ 
     $this->doctrine = $doctrine; 
     $this->session = $session; 
    } 

    public static function getSubscribedEvents(){ 
     return array(
      KernelEvents::TERMINATE => 'increasePageCount' 
     ); 
} 

    public function increasePageCount(){ 

     $em = $this->doctrine->getManager(); 

     $log = $em->getRepository('Bundle:UserLog')->findBy(array('sessionId' => $this->session->getId())); 

     if($log){ 
      $log = $log[0]; 
      $log->increasePageCounter(); //Function in the entity that increases the count 
      $em->persist($log); 
      $em->flush(); 
     } 
    } 
} 

該代碼將被調用,這是好的,但每頁換10次,這顯然是很多方法!

我也嘗試了Kernel::REQUEST事件,但結果相同。

我可以怎樣才能讓每個新頁面請求只增加一次PageCounter? (例如,用戶從賬單概覽開始到某個賬單的細節)

回答

0

Kernel::VIEW在返回控制器動作響應時被觸發。如果你想跟蹤從一個視圖到另一個視圖的用戶,這似乎是你最好的選擇。

https://github.com/symfony/HttpKernel/blob/master/HttpKernel.php#L150

當然,如果你只是返回一些Ajax調用,或者你可能會做一個重定向一個JSON響應這也被解僱。所有的迴應都被解僱了。不只是呈現。您可能可以通過請求來過濾它。

此外,我真的建議不要在Symfony內部進行用戶跟蹤。像Piwik這樣的工具有一個很好的API,可以爲用戶創建良好的配置文件並進行跟蹤。還有一個Piwik的Symfony Bundle,不知道它是否仍然維護,甚至可以工作