Bonjour,
je débute en Symfony et j'ai réussi pas mal de choses:
j'ai un trait, qui crée des champs updatedAt et createdAt , et récupère le updatedAT grâce à un lifecycle callback
Code php : 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 <?php namespace App\Entity\Traits; trait TimeStampable { /** * @ORM\Column(type="datetime_immutable", options={"default": "CURRENT_TIMESTAMP"}) */ private $createdAt; /** * @ORM\Column(type="datetime_immutable", options={"default": "CURRENT_TIMESTAMP"}) */ private $updatedAt; public function getCreatedAt(): ?\DateTimeImmutable { return $this->createdAt; } public function setCreatedAt(\DateTimeImmutable $createdAt): self { $this->createdAt = $createdAt; return $this; } public function getUpdatedAt(): ?\DateTimeImmutable { return $this->updatedAt; } public function setUpdatedAt(\DateTimeImmutable $updatedAt): self { $this->updatedAt = $updatedAt; return $this; } /** * @ORM\PrePersist * @ORM\PreUpdate */ public function updateTimestamp() { if ($this->getCreatedAt()=== null) { $this->setCreatedAt(new \DateTimeImmutable()); } $this->setUpdatedAt(new \DateTimeImmutable()); } }
Ça marche bien et même trop bien car, lorsque j'enregistre une date de déconnexion (lastLogout) pour un utilisateur, dans la table user
étant donné que cette table utilise le trait, alors le updatedAt change aussi. Du coup ces deux variables ont la même valeur...
C'est gênant, car si un utilisateur se connecte, je vais lui sortir une liste de tous les utilisateurs dont le profil a changé, qui comprendra aussi les utilisateurs qui n'ont fait que se connecter et déconnecter sans rien changer à leur profil !
Donc , y a-t-il moyen de ne pas faire de updatedAt si le seul champ qui change dans la table est le lastLogout ?
je récupère le lastLogout avec un listener:
Code php : 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 <?php namespace App\EventListener; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Security\Http\Event\LogoutEvent; class LogoutListener { public function __construct(EntityManagerInterface $em) { $this->em = $em; } public function __invoke(LogoutEvent $logoutEvent) { $user = $logoutEvent->getToken()->getUser(); $user->setLogoutAt(new \DateTimeImmutable()); $this->em->persist($user); $this->em->flush(); } }
En espérant que ce n'est pas trop pointu !!
Laurent.
Partager