0
在我的項目我管理用戶和包含用戶名和密碼是強制性(因爲我用FOSUserBundle),我可以用兩種方式處理它們:通話的Symfony事件僅在某些情況下
- 如果用戶應該有機會獲得管理方面,用戶名和密碼應該由用戶註冊設置(如名稱:myusername/MYPASSWORD)
- 如果用戶不應該進入管理區,這個用戶名和密碼是默認定義(例如user123,pass123其中123是用戶ID)
我並不完全放心symfony中eventListener/dispatcher的subtelties。
爲了有這樣的行爲,我創建了一個監聽器:
use Doctrine\ORM\Event\LifecycleEventArgs;
use MyBundle\Entity\User;
class UserListener
{
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$em = $args->getEntityManager();
if ($entity instanceof User) {
$entity->setUsername('user'.$entity->getId());
$entity->setPassword('user'.$entity->getId());
$entity->setEmail('user'.$entity->getId());
$em->persist($entity);
$em->flush();
}
}
}
與服務:
mybundle.user_listener:
class: MyBundle\EventListener\UserListener
tags:
- { name: doctrine.event_listener, event: postPersist }
但這obiously不起作用:因爲這是一個服務,它我每次添加更新用戶都適用。
我的問題是: 我該如何應用這個監聽器只有當我需要它:?
-
只有在插入時(而不是在更新)
- 僅在控制器「我問它」
=>也許我錯了,但我不能傳遞參數從控制器到postPersist事件?
檢查的UnitOfWork,看變更是什麼,確定羯羊或不運行代碼.. –
因此,在這種情況下,我不會用任何監聽器? – Overdose
是的,你可以,但是在這個監聽器裏面,你可以檢查你的用戶實體中發生了什麼變化,並且只運行setter,並且堅持並刷新,如果相關內容已經改變了,或者我誤解了這個問題? –