setName関数が実際に何かを実行していることを最初に確認します($this-> name = $name...) 既に機能している場合は、services.yml でイベント リスナーを定義できます。あなたはフラッシュを呼び出します。
entity.listener:
class: YourName\YourBundle\EventListener\EntityListener
calls:
- [setContainer, ["@service_container"]]
tags:
- { name: doctrine.event_listener, event: onFlush }
次に、EntityListener を定義します。
namespace YourName\YourBundle\EventListener;
use Doctrine\ORM\Event;
use Symfony\Component\DependencyInjection\ContainerAware;
class EntityListener extends ContainerAware
{
/**
* Gets all the entities to flush
*
* @param Event\OnFlushEventArgs $eventArgs Event args
*/
public function onFlush(Event\OnFlushEventArgs $eventArgs)
{
$em = $eventArgs->getEntityManager();
$uow = $em->getUnitOfWork();
//Insertions
foreach ($uow->getScheduledEntityInsertions() as $entity) {
# your code here for the inserted entities
}
//Updates
foreach ($uow->getScheduledEntityUpdates() as $entity) {
# your code here for the updated entities
}
//Deletions
foreach ($uow->getScheduledEntityDeletions() as $entity) {
# your code here for the deleted entities
}
}
}
どのエンティティが変更されているかを知る必要があるが、それらがデータベースに保存された後に何かを行う場合は、変更されたエンティティをプライベート配列に保存し、配列からエンティティを取得する onFlush イベントを定義します。
ところで、この種のイベントをトリガーするには、エンティティに @ORM\HasLifecycleCallbacks を追加する必要があります。