*/ class NodeViewListener { protected NodeRepository $nodeRepository; protected NodeViewRepositoryQuery $nodeViewRepositoryQuery; protected NodeViewFactory $nodeViewFactory; protected EntityManager $manager; public function __construct( NodeRepository $nodeRepository, NodeViewRepositoryQuery $nodeViewRepositoryQuery, NodeViewFactory $nodeViewFactory, EntityManager $manager ) { $this->nodeRepository = $nodeRepository; $this->nodeViewRepositoryQuery = $nodeViewRepositoryQuery; $this->nodeViewFactory = $nodeViewFactory; $this->manager = $manager; } public function onKernelRequest(RequestEvent $event) { $request = $event->getRequest(); if (!$request->attributes->has('_node')) { return; } $node = $this->nodeRepository->findOneById($request->attributes->get('_node')); if (!$node || !$node->getEnableViewCounter()) { return; } $nodeView = $this->nodeViewRepositoryQuery->create() ->filterByRequest($request) ->andWhere('.date=CURRENT_DATE()') ->findOne() ; if (!$nodeView) { $nodeView = $this->nodeViewFactory->create($node, $request->getPathInfo()); } $nodeView->addView(); if ($nodeView->getId()) { $this->manager->update($nodeView); } else { $this->manager->create($nodeView); } } }