Доктрина - разница между введенными сущностями в слушателе сущностей

Как мы видим в официальная документация, Doctrine реализует прослушиватели сущностей, которые выполняются только тогда, когда что-то происходит с определенной сущностью.

Однако существует различная инъекция между слушателями / подписчиками событий жизненного цикла и слушателями сущностей. Фактически для слушателей / подписчиков Doctrine внедряет только объект LifecycleEventArgs в определенные обратные вызовы.

// Event listener/subscriber
public function postUpdate(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
}

который дает вам в любом случае доступ к сущности, но затем в слушателе сущности сущность также вводится явно как первый аргумент

// Entity listener
public function postUpdate(object $entity, LifecycleEventArgs $args)
{
    $entity2 = $args->getEntity();
}

и он все еще доступен в $args. Об этом также сообщается в документации:

An entity listener method receives two arguments, the entity instance and the lifecycle event.

Но в чем же тогда разница между $entity и $args->getEntity() в прослушивателе сущностей?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
79
1

Ответы 1

Это одно и то же лицо.

Поскольку LifecycleEventArgs внедряется даже в «общий» прослушиватель доктрины, вам необходимо получить объект сущности. С другой стороны, у LifecycleEventArgs есть много вещей, которые вы можете извлечь в обоих случаях.

В этом случае они использовали один и тот же объект для обеих операций: это довольно часто и приемлемо с моей точки зрения.

Вы можете проверить это сами, выполнив что-нибудь вроде

// Entity listener
public function postUpdate(object $entity, LifecycleEventArgs $args)
{
    $entity2 = $args->getEntity();
    dump(spl_obj_hash($entity) == spl_obj_hash($entity)); // you can echo this, or log, or VarDump, or whatever
}

Да, но дело не в том, почему вводится LifecycleEventArgs, а скорее в том, почему объект вводится явно, когда он уже доступен в $args ...

DrKey 19.09.2018 11:23

@DrKey Подумайте о тестировании: причиной может быть его ввод вместо того, чтобы заглушить вызов от args. Для меня это просто «ярлык», и он не добавляет к этому никакой сложности или чего-то еще. Бьюсь об заклад, именно по таким причинам.

DonCallisto 19.09.2018 11:26

Другие вопросы по теме