PrePersist veritabanına bilgi girmeden tam önce çalışır, postPersist ise bilgi girişinin tam ardından çalışır. Aşağıdaki örnek test amaçlı olarak User ve UserLog entity üzerlerine kuruludur. User tablosuna controller içindeyken yeni bir kayıt girerken, aynı anda event listener ile User ve UseLog entitilerinde değişiklik yapar.


UserController.php


public function createAction()
{
$user = new User();
$user->setUsername('username');
$user->setPassword('password');
$this->entityManager->persist($user);
$this->entityManager->flush();
}

Listeners.yml


services:
application_backend.event_listener.user_entity:
class: Application\BackendBundle\EventListener\UserEntityListener
tags:
- { name: doctrine.event_listener, event: prePersist }
- { name: doctrine.event_listener, event: postPersist }

UserEntityListener.php


namespace Application\BackendBundle\EventListener;

use Application\BackendBundle\Entity\User;
use Application\BackendBundle\Entity\UserLog;
use Doctrine\ORM\Event\LifecycleEventArgs;

class UserEntityListener
{
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

/**
* Same entity
*/
if ($entity instanceof User) {
$entity->setPrePersist(date('d/m/Y H:i:s'));
}

/**
* Log entity
*/
if ($entity instanceof User) {
$log = new UserLog();
$log->setUserId($entity->getId());
$log->setMessage('prePersist at ' . date('d/m/Y H:i:s'));

$em = $args->getEntityManager();
$em->persist($log);
$em->flush();
}
}

public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

/**
* Same entity
*/
if ($entity instanceof User) {
$entity->setPostPersist(date('d/m/Y H:i:s'));
}

/**
* Log entity
*/
if ($entity instanceof User) {
$log = new UserLog();
$log->setUserId($entity->getId());
$log->setMessage('postPersist at ' . date('d/m/Y H:i:s'));

$em = $args->getEntityManager();
$em->persist($log);
$em->flush();
}
}
}

Sonuç


mysql> SELECT id, username, password, pre_persist, post_persist FROM user;
+----+----------+------------+---------------------+---------------------+
| id | username | password | pre_persist | post_persist |
+----+----------+------------+---------------------+---------------------+
| 1 | IVAHDL | 1435604816 | 29/06/2015 20:06:56 | 29/06/2015 20:06:56 |
+----+----------+------------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM user_log;
+----+---------+------------------------------------+
| id | user_id | message |
+----+---------+------------------------------------+
| 1 | NULL | prePersist at 29/06/2015 20:06:56 |
| 2 | 1 | postPersist at 29/06/2015 20:06:56 |
+----+---------+------------------------------------+
2 rows in set (0.00 sec)