Как мы видим в официальная документация, 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() в прослушивателе сущностей?






Это одно и то же лицо.
Поскольку 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
}
@DrKey Подумайте о тестировании: причиной может быть его ввод вместо того, чтобы заглушить вызов от args. Для меня это просто «ярлык», и он не добавляет к этому никакой сложности или чего-то еще. Бьюсь об заклад, именно по таким причинам.
Да, но дело не в том, почему вводится
LifecycleEventArgs, а скорее в том, почему объект вводится явно, когда он уже доступен в$args...