Php Symfony2每个用户访问的站点数

Php Symfony2每个用户访问的站点数,php,symfony,Php,Symfony,我试图计算用户在登录期间访问了多少页面 因此,我创建了一个正在侦听Kernel::TERMINATE事件的服务,每当用户访问我系统中的另一个站点时,该服务都会增加一个计数器 class ActivityListener implements EventSubscriberInterface { private $doctrine; private $session; public function __construct(Registry $doctrine, Sess

我试图计算用户在登录期间访问了多少页面

因此,我创建了一个正在侦听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事件,但结果相同

我能做些什么,使它在每个新页面请求中只增加一次页面计数器?e、 g.当返回控制器操作响应时,用户从账单概览转到某个账单的详细信息。如果你只想跟踪从一个视图到另一个视图的用户,这似乎是你最好的选择

当然,如果您只是在某个ajax调用中返回JSON响应或可能执行的重定向,也会触发此操作。所以所有的反应都被激发了。不仅仅是渲染。不过,您可以通过请求对其进行筛选

另外,我真的建议不要在Symfony内部进行用户跟踪。像Piwik这样的工具有一个很好的API,您可以在其中为用户创建好的配置文件并跟踪它们。还有一个用于Piwik的Symfony包,不确定它是否仍在维护甚至工作