2
新しいPlasmid Entityを登録するときに、自動名(p0001、p0002、p0003など)を指定したい場合、データベースで最後のPlasmidエンティティを選択する必要があります特定のUser、そのautoNameを取得し、この前の名前を使用して新しい名前を定義します。Doctrine EventListenerでユーザーを取得する
しかし、私はリスナーにtoken_storageを注入すると、トークンはnullです...コントローラでは、私はそのユーザーを持つことができます、それは仕事です。
service.yml
app.event_listener.plasmid:
class: AppBundle\EventListener\PlasmidListener
arguments: ["@security.token_storage"]
tags:
- { name: doctrine.event_listener, event: prePersist }
そして、PlasmidListener
class PlasmidListener
{
private $user;
public function __construct(TokenStorage $tokenStorage)
{
$this->user = $tokenStorage->getToken()->getUser();
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
// If the entity is not a Plasmid, return
if (!$entity instanceof Plasmid) {
return;
}
// Else, we have a Plasmid, get the entity manager
$em = $args->getEntityManager();
// Get the last plasmid Name
$lastPlasmid = $em->getRepository('AppBundle:Plasmid')->findLastPlasmid($this->user);
// Do something with the last plasmid in the database
}
}
私は教義リスナーの実際のユーザーを取得することができますなぜ誰かが知っている場合は?
おかげ
おかげで多くのことを、それは動作しますが、TokenStorageである理由あなたのアイデアを持っていますコンストラクタで空であり、prePersist関数に何かが含まれていますか? – mpiot
サービスは開始時に初期化され、ユーザーはまだ認証されません。ユーザーとトークンでもリクエスト中に変更できますが、サービスはありませんが、静的なプロパティを持つ静的クラスに似ています。それは私の考えです:) – malcolm