Каков наилучший способ реализации пользовательской активности в symfony 2?
А как это сделать ?
Я знаю, что есть система событий symfony 2. Может быть, я должен инициировать событие?
И целесообразно ли обновлять каждый запрос на страницу или есть другие (лучшие) способы обновления активности пользователя?
Хорошим способом отслеживания пользовательских запросов (и, возможно, их активности) является прослушивание события kernel.request:
Класс слушателя:
namespace Acme\YourBundle\EventListener; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\DependencyInjection\ContainerInterface; class RequestListener { /** * Container * * @var ContainerInterface */ protected $container; /** * Listener constructor * * @param ContainerInterface $container */ public function __construct(ContainerInterface $container) { $this->container = $container; } /** * kernel.request Event * * @param GetResponseEvent $event */ public function onKernelRequest(GetResponseEvent $event) { $request = $event->getRequest(); // Here you can intercept all HTTP requests, and through $container get access to user information } }
Конфигурация для слушателя:
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <parameters> <parameter key="acme.request_listener.class">Acme\YourBundle\EventListener\RequestListener</parameter> </parameters> <services> <service id="acme.request_listener" class="%acme.request_listener.class%"> <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" /> <argument type="service" id="service_container" /> </service> </services> </container>
Вы можете получить дополнительную информацию по этой теме в официальной документации Symfony:
public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); if ($controller[0] instanceof Controller and (!strpos( get_class($controller[0]), 'App\FrontendBundle')===false) ) { } }