を私はユーザーを管理し、(私はFOSUserBundleを使用しているため)ユーザ名とパスワードの両方が必須で、私は2つの方法でそれらを処理することができます:コールsymfonyのイベント
- ユーザーの場合ユーザ名とパスワードは、ユーザ登録(例:myusername/mYpAsSwOrD)で設定する必要があります。
- ユーザが管理領域にアクセスすべきでない場合、このユーザ名とパスワードはデフォルトで例えば、user123、pass123、123はユーザIDです)
私は、symfonyのeventListener/dispatcherのサブタイトルを完全に使いこなせるわけではありません。
mybundle.user_listener:
class: MyBundle\EventListener\UserListener
tags:
- { name: doctrine.event_listener, event: postPersist }
しかし、これはobiously動作しません:サービスで
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();
}
}
}
:私はリスナーを作成して、そのような行動させるためには
これはサービスであるために、それは私はユーザーの更新を追加するたびに適用されます。
私の質問は: 私はそれが必要なときだけこのリスナーを適用できますか?のみ挿入で(ない更新上)
- コントローラに
=>たぶん私が間違っているが、私は、パラメータを渡すことはできません「私はそれを求める」場合にのみ、コントローラーからpostPersistイベントへ?
チェンジセットの内容を確認し、コードを実行するかどうかを決定してください。 –
その場合、リスナーは使用しませんか? – Overdose
はい、そうですが、このリスナーの中で、あなたのユーザーエンティティで何が変更されたかを正確に確認し、セッターだけを実行して、永続的にフラッシュしてください。関連するものが変更された場合や、 –