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

Событие PostLoad

Событие PostLoad срабатывает после того, как Doctrine загрузила сущность из базы данных и заполнила её поля. Обработчик этого события позволяет выполнить дополнительную логику над уже загруженным объектом: вычислить производные значения, нормализовать данные, подгрузить связанные данные. Обработчик регистрируется через атрибут HasLifecycleCallbacks на классе сущности и метод с атрибутом PostLoad.

Синтаксис

#[PostLoad] public function methodName(): void

Пример

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

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] #[ORMHasLifecycleCallbacks] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string')] private string $title = ''; #[ORMColumn(type: 'text')] private string $text = ''; private string $excerpt = ''; #[ORMPostLoad] public function buildExcerpt(): void { $this->excerpt = mb_substr($this->text, 0, 20); } public function getExcerpt(): string { return $this->excerpt; } } ?>

Теперь при загрузке статьи из базы данных поле excerpt будет заполнено автоматически:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function show(EntityManagerInterface $em): Response { $article = $em->getRepository(Article::class)->find(1); return new Response($article->getExcerpt()); } } ?>

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

"abcde"

Пример

Давайте в обработчике PostLoad нормализуем строковое поле и приведём его к нижнему регистру:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] #[ORMHasLifecycleCallbacks] class User { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string')] private string $name = ''; #[ORMPostLoad] public function normalizeName(): void { $this->name = mb_strtolower($this->name); } public function getName(): string { return $this->name; } } ?>

Результат выполнения кода для пользователя с именем 'ABCDE' в базе данных:

"abcde"

Пример

Давайте в обработчике PostLoad заполним булево поле на основе другого поля:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] #[ORMHasLifecycleCallbacks] class Product { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'integer')] private int $quantity = 0; private bool $inStock = false; #[ORMPostLoad] public function checkStock(): void { $this->inStock = $this->quantity > 0; } public function isInStock(): bool { return $this->inStock; } } ?>

Результат выполнения кода для товара с количеством 5:

true

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

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