Musisz sobie utworzyć nową kolumnę w bazie danych np. lastActivityAt do tego dopisać jakiś serwis który będzie Ci aktualizował to pole przy wykonaniu jakieś akcji.
Moje rozwiązanie jest co prawda dla FOS ale to nie problem przerobić je.
<?php
namespace AppBundle\EventListener;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterfa
ce;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use FOS\UserBundle\Model\UserManagerInterface;
use FOS\UserBundle\Model\UserInterface;
class ActivityListener
{
protected $securityContext;
protected $userManager;
public function __construct(TokenStorageInterface $securityContext, UserManagerInterface $userManager)
{
$this->securityContext = $securityContext;
$this->userManager = $userManager;
}
public function onCoreController(FilterControllerEvent $event)
{
// Check that the current request is a "MASTER_REQUEST"
// Ignore any sub-request
if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
return;
}
// Check token authentication availability
if ($this->securityContext->getToken()) {
$user = $this->securityContext->getToken()->getUser();
if ( ($user instanceof UserInterface) && !($user->isActiveNow()) ) {
$user->setLastActivityAt(new \DateTime());
$this->userManager->updateUser($user);
}
}
}
}
Obsługa serwisu:
activity_listener:
class: %activity_listener.class%
arguments: ["@security.token_storage", "@fos_user.user_manager"]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onCoreController }
I potem to już tylko odpowiednie zapytanie czyli
<?php
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function getActive()
{
$delay = new \DateTime();
$delay->setTimestamp(strtotime('2 minutes ago')); $qb = $this->createQueryBuilder('u')
->where('u.lastActivityAt > :delay')
->setParameter('delay', $delay)
;
return $qb->getQuery()->getResult();
}
}
A jak chcesz mieć to w Twigu to:
Utwórz nową akcję w kontrolerze a w Twigu użyj: render(controller('nazwa')),
albo
Stwórz Helper dla Twiga
http://symfony.com/doc/current/templating/..._extension.html