Bonjour,

Je suis en train d'utiliser le FOSUserBundle dans mon projet Symfony 4. Je veux lister les utilisateurs connectés afin de créer un chat sur le site. Du coup j'ai ajouté la propriété lastActivityAt et ajouter, également, un getter et un setter pour cette propriété:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
     * Date/Time of the last activity
     *
     * @var \Datetime
     * @ORM\Column(name="last_activity_at", type="datetime", nullable=true)
     */
    protected $lastActivityAt;
 
/**
     * @param \Datetime $lastActivityAt
     */
    public function setLastActivityAt($lastActivityAt)
    {
        $this->lastActivityAt = $lastActivityAt;
    }
 
    /**
     * @return \Datetime
     */
    public function getLastActivityAt()
    {
        return $this->lastActivityAt;
    }
Et puis j'ai ajouté une méthode pour vérifier la connectivité de l'utilisateur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
/**
     * @return Bool Whether the user is active or not
     */
    public function isActiveNow()
    {
        // Delay during wich the user will be considered as still active
        $delay = new \DateTime('2 minutes ago');
 
        return ( $this->setLastActivityAt($delay));
    }
J'ai ajouté un listener:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class ActivityListener
{
    protected $tokenStorage;
    protected $userManager;
 
    public function __construct(TokenStorage $tokenStorage, UserManagerInterface $userManager)
    {
        $this->tokenStorage = $tokenStorage;
        $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);
            }
        }
    }
}
Dans mon controller, j'ai créer un render vers ma page layout.html.twig:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
/*
	 * @Template()
	 */
	public function whoIsOnlineAction()
	{
		$users = $this->getDoctrine()->getManager()->getRepository('App:User')->getActive();
		//return new Response(array('users' => $users));
		return $this->render('bundles\\FOSUserBundle\\layout.html.twig', array('users' => $users));
		//return array('users' => $users);
	}
sur mon template layout.html.twig, j'ai fais appel au render et j'ai lancé une boucle pour lister tous les utilisateurs connectés:

Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
{% extends 'base.html.twig' %}
 
{% block content %}
{{ render(controller('App\\Controller\\UserController:whoIsOnlineAction')) }}
<ul>
    {% for user in users %}
    <li>{{ user.username}}</li>
    {% endfor %}
</ul>
 
{% endblock content %}

Sauf que là, quand je lancer mon projet, rien ne se passe et ça tourne en boucle jusqu'au crash du serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Allowed memory size of 134217728 bytes exhausted (tried to allocate 774144 bytes) in C:\wamp64\www\staff-test\vendor\doctrine\orm\lib\Doctrine\ORM\AbstractQuery.php on line 435
 [ERROR] Server terminated unexpectedly.


Je ne sais pas ou je ne vois pas encore d'où vient le problème. Quelqu'un peut m'aider?
Sur ma base de données, je vois bien que mon champ est mis à jour après chaque activité sur le site.