Doctrine Entity LifecycleОбработка изменения состояний сущностей
Lifecycle Callbacks
prePersist
postPersist
preUpdate
postUpdate
preRemove
postRemove
Плюсы
Нет требуют создавать отдельный класс для реализации логики
обработки событий
Traits?????
Минусы
Ограничены контекстом Entity и не имеют доступа к service
container (как и сама Entity)
Пример обработки заливки файлов
с помощью Lifecycle Callbacks
/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*/
public function upload()
{
// …
$this→getFile()→move($this→getUploadRootDir(), …);
// …
}
protected function getUploadRootDir()
{
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
* из официального мануала по
Symfony
Event Listener/Subscriber
Lifecycle Callbacks
loadClassMetadata
preFlush
onFlush
postFlush
onClear
Плюсы
Позволяет обратиться к service container
Имеет больше «полномочий» чем Lifecycle Callbacks
Идеально подходит для прослушивания событий от всех Entity
Минусы
Не очень годится для прослушивания событий от части множества
всех Entity
Требует создания отдельного класса и регистрации его как сервиса
Портируем заливку файлов
с Lifecycle Callbacks на Event Subscriber
public function postPersist(EventArgs $event)
{
// …
if($eventArgs→getEntity() instanceof AttachedFile)
{
// …
}
// …
}
* из официального мануала по
Doctrine
EntityListener
Плюсы
Обладает возможностью доступа к service container
Регистрируется для Entity на уровне класса/иерархии классов
Возможность легко комбинировать Listener’ы в Entity-классах
Минусы
Требует создания отдельного класса и регистрации его как сервиса
Тот же самый пример с использованием
Entity Listener
class UploadListener
{
protected function preUpload($entity)
{
$this→uploadService→upload($entity→getFile());
}
// …
}
…
/**
* @ORM\Entity
* @ORM\EntityListeners({"UploadListener"})
*/
class AttachedFile
{
public function getFile() { /* … */ }
// …
}
Затрагивает все сущности?
Требуется service container?
Event Listener
Entity Listener
Lifecycle Callback
да
да
нет
нет
– Леонид Репин, Levelab
@initpenguin
Doctrine Entity Lifecycle
Top Related