РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
130 of 258 menu

Событие PostRemove

Событие PostRemove относится к жизненному циклу сущности и вызывается Doctrine после того, как запись была удалена из базы данных. Метод-обработчик помечается атрибутом PostRemove и принимает один параметр - EventArgs, через который можно получить доступ к объекту сущности и EntityManager. В отличие от PreRemove, данное событие срабатывает уже после выполнения DELETE-запроса, поэтому изменения, сделанные в обработчике, не повлияют на удалённую запись.

Синтаксис

#[PostRemove] public function methodName(EventArgs $args): void

Пример

Давайте создадим сущность Article с обработчиком события PostRemove, который логирует факт удаления:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; use DoctrineORMEventLifecycleEventArgs; use DoctrineORMMappingPostRemove; #[ORMEntity] #[ORMHasLifecycleCallbacks] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title = ''; public function getId(): ?int { return $this->id; } public function getTitle(): string { return $this->title; } public function setTitle(string $title): self { $this->title = $title; return $this; } #[PostRemove] public function onPostRemove(LifecycleEventArgs $args): void { $entity = $args->getObject(); echo 'Deleted article: ' . $entity->getTitle(); } } ?>

Теперь удалим запись через EntityManager:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/delete', name: 'article_delete')] public function delete(EntityManagerInterface $em): Response { $article = $em->getRepository(Article::class)->find(1); $em->remove($article); $em->flush(); return new Response('done'); } } ?>

Результат выполнения кода:

"Deleted article: hello"

Пример

Давайте в обработчике PostRemove удалим связанный файл после удаления сущности Article:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; use DoctrineORMEventLifecycleEventArgs; use DoctrineORMMappingPostRemove; #[ORMEntity] #[ORMHasLifecycleCallbacks] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title = ''; #[ORMColumn(type: 'text', nullable: true)] private ?string $filePath = null; public function getId(): ?int { return $this->id; } public function getTitle(): string { return $this->title; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function getFilePath(): ?string { return $this->filePath; } public function setFilePath(?string $filePath): self { $this->filePath = $filePath; return $this; } #[PostRemove] public function onPostRemove(LifecycleEventArgs $args): void { $entity = $args->getObject(); $file = $entity->getFilePath(); if ($file !== null && file_exists($file)) { unlink($file); echo 'File removed: ' . $file; } } } ?>

Результат выполнения кода после удаления сущности:

"File removed: /uploads/article.txt"

Смотрите также

  • событие PreRemove,
    которое вызывается перед удалением записи
  • событие PostPersist,
    которое вызывается после вставки записи
  • событие PostUpdate,
    которое вызывается после обновления записи
  • атрибут HasLifecycleCallbacks,
    который включает поддержку событий жизненного цикла
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить