Доктрина - Разница между внедренными сущностями в прослушивателе сущностей - PullRequest
0 голосов
/ 19 сентября 2018

Как мы видим в официальной документации 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.Об этом также сообщается в документации:

Метод прослушивателя сущностей получает два аргумента: экземпляр сущности и событие жизненного цикла.

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

1 Ответ

0 голосов
/ 19 сентября 2018

Это та же сущность.

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

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

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

// 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...