I have a question about listing all connecting user with FOSUserBundle. I followed all steps on this link
But when I try to log into my user profile, I got this error:
Argument 1 passed to App\Repository\UserRepository::__construct() must implement interface Symfony\Bridge\Doctrine\RegistryInterface, instance of Doctrine\ORM\EntityManager given, called in C:\wamp64\www\staff-test\vendor\doctrine\doctrine-bundle\Repository\ContainerRepositoryFactory.php on line 84
I added just a modification on my listener:
<?php
namespace App\EventListener;
**use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;**
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use FOS\UserBundle\Model\UserManagerInterface;
use FOS\UserBundle\Model\UserInterface;
/**
* Listener that updates the last activity of the authenticated user
*/
class ActivityListener
{
protected $tokenStorage;
protected $userManager;
public function __construct(TokenStorage $securityContext, UserManagerInterface $userManager)
{
$this->securityContext = $securityContext;
$this->userManager = $userManager;
}
/**
* Update the user "lastActivity" on each request
* @param FilterControllerEvent $event
*/
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->tokenStorage->getToken()**) {
**$user = $this->tokenStorage->getToken()->getUser();**
if ( ($user instanceof UserInterface) && !($user->isActiveNow()) ) {
$user->setLastActivityAt(new \DateTime());
$this->userManager->updateUser($user);
}
}
}
}
On my UserRepository:
<?php
namespace App\Repository;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;
class UserRepository extends EntityRepository #ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, User::class);
}
public function getActive()
{
// Comme vous le voyez, le délais est redondant ici, l'idéale serait de le rendre configurable via votre bundle
$delay = new \DateTime();
$delay->setTimestamp(strtotime('2 minutes ago'));
$qb = $this->createQueryBuilder('u')
->where('u.lastActivity > :delay')
->setParameter('delay', $delay)
;
return $qb->getQuery()->getResult();
}
}