symfony 5, прослушиватели жизненного цикла Doctrine не запущены

#php #symfony

#php #symfony

Вопрос:

Я пытаюсь создать прослушиватели жизненного цикла Doctrine, но он не выполняет дамп. я создал объект, прослушиватель и службу обновления.yml

это безумие 😉

у меня есть: в services.yaml

   AppEventListenerTestOrmListener:
    tags:
      - { name: doctrineormtester,event: postPersist, entity: 'AppEntityGalery'}
 

в src/EventListener/TestOrmListener.php

 <?php
namespace AppEventListener;

use AppEntityGalery;
use DoctrinePersistenceEventLifecycleEventArgs;

class TestOrmListener
{
    // the listener methods receive an argument which gives you access to
    // both the entity object of the event and the entity manager itself
    public function postPersist(LifecycleEventArgs $args): void
    {
        $entity = $args->getObject();

        // if this listener only applies to certain entity types,
        // add some code to check the entity type as early as possible
        if (!$entity instanceof Galery) {
            return;
        }

        $entityManager = $args->getObjectManager();
        dump($entityManager);
        die('mick');
        // ... do something with the Product entity
    }
}
 

в галерее сущностей

     <?php

namespace AppEntity;

use AppRepositoryGaleryRepository;
use DoctrineORMMapping as ORM;
use AppEntityTraitsTimestampable;
use SymfonyComponentValidatorConstraints as Assert;

/**
 * @ORMEntity(repositoryClass=GaleryRepository::class)
 * @ORMHasLifecycleCallbacks
 */
class Galery
{
    use Timestampable;
    /**
     * @ORMId
     * @AssertNotBlank
     * @ORMColumn(type="string", length=255)
     */
    private $nom;
 

У вас есть идея?

Комментарии:

1. Я предполагаю, что у вас есть опечатка в тегах слушателя.

2. у меня ошибка в службах. yaml, но прослушиватель не запускается

3. Попробуйте исправить определение тегов вашего прослушивателя, это может помочь запустить ваш прослушиватель в событиях жизненного цикла doctrine. — { имя: ‘doctrine.orm.entity_listener’, событие: ‘postPersist’, сущность: ‘App Entity Galery’}

4. @eldino и чем это закончилось? Был ли мой ответ полезным или вы нашли другое решение? Пожалуйста, оставьте какой-нибудь ответ для будущих читателей.

5. хорошо, я пишу комментарий, спасибо

Ответ №1:

У вас проблема в разделе тегов. Согласно официальной документации:

Следующий шаг — включить прослушиватель Doctrine в приложении Symfony, создав для него новую службу и пометив ее тегом doctrine.event_listener

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

 AppEventListenerTestOrmListener:
        tags:
            - { name: 'doctrine.event_listener', event: 'postPersist', entity: 'AppEntityGalery' }
 

Комментарии:

1. Я также протестировал его в своем собственном проекте (с вашим слушателем), и он работает

2. спасибо за вашу помощь @Karol Dabrowski