adgauvry / s-entity-listener
允许在Symfony实体上进行时间戳标记
dev-master
2019-12-23 16:15 UTC
Requires
- php: >=5.4.0
- symfony/orm-pack: >=1.0.0
This package is auto-updated.
Last update: 2024-09-24 03:08:11 UTC
README
安装
执行以下命令
composer require adgauvry/s-entity-listener
配置
需要在services.yaml中添加
application_backend.event_listener: class: App\Service\MaClasseHorodatage tags: - { name: doctrine.event_listener, event: onFlush } arguments: - "@=service('security.token_storage').getToken() != null ? service('security.token_storage' .getToken().getUser() : null"
还需要有一个名为用户的实体,该实体必须包含一个email字段,还有一个名为时间戳的实体,该实体必须与用户实体有ManyToOne关联,并包含字段nomEntite、idEntite、date、action及其对应的getter/setter方法。
查看时间戳实体的示例
<?php use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="App\Repository\HorodatageRepository") */ class Horodatage { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\ManyToOne(targetEntity="App\Entity\Utilisateur") * @ORM\JoinColumn(nullable=false) */ private $utilisateur; /** * @ORM\Column(type="string", length=255) */ private $nomEntite; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $idEntite; /** * @ORM\Column(type="date") */ private $date; /** * @ORM\Column(type="string", length=255) */ private $action; public function getId(): ?int { return $this->id; } public function getUtilisateur(): ?Utilisateur { return $this->utilisateur; } public function setUtilisateur(?Utilisateur $utilisateur): self { $this->utilisateur = $utilisateur; return $this; } public function getNomEntite(): ?string { return $this->nomEntite; } public function setNomEntite(string $nomEntite): self { $this->nomEntite = $nomEntite; return $this; } public function getIdEntite(): ?string { return $this->idEntite; } public function setIdEntite(?string $idEntite): self { $this->idEntite = $idEntite; return $this; } public function getDate(): ?\DateTimeInterface { return $this->date; } public function setDate(\DateTimeInterface $date): self { $this->date = $date; return $this; } public function getAction(): ?string { return $this->action; } public function setAction(string $action): self { $this->action = $action; return $this; } }
用法
要使用时间戳,需要让一个类继承自EntityChangeListener。然后实现onFlush方法。
对于每个希望监视修改的实体,调用从EntityChangeListener继承的方法horodatage,第一个参数是实体,第二个参数是实体名称,第三个参数是传递给OnFlush的参数。
class MaClasseHorodatage extends EntityChangeListener { public function onFlush(OnFlushEventArgs $args) { parent::horadatage(MaClasse::class,"MaClasse",$args); } }