我正在尝试计算用户在登录期间访问过的页数。
所以我创建了一个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 :(得分:0)
Kernel::VIEW
。如果您只是想跟踪用户从一个视图到另一个视图,那么这似乎是您最好的选择。
请参阅https://github.com/symfony/HttpKernel/blob/master/HttpKernel.php#L150
当然,如果您只是在某个ajax调用或您可能执行的重定向中返回JSON响应,也会触发此操作。所以所有回复都被解雇了。不只是渲染。您可以通过请求过滤它。
另外我真的建议不要在Symfony内部进行用户跟踪。像Piwik这样的工具有一个很好的API,您可以为用户创建良好的配置文件并跟踪它们。 Piwik还有一个Symfony Bundle,不确定它是否仍然可以维护甚至可以使用