#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