У меня возникла проблема, когда я хочу выполнить некоторую доктрину постсоветского кода с помощью подписчика. Когда я обновляю объект, мои функции on/post flush
не выполняются.Symfony 2 подписчики событий Doctrine onFlush/PostFlush не запускаются во внешнем пакете
У меня нет ошибок (или что-то еще) в журналах symfony, ничего в журналах nginx/php, даже если я вызываю синтаксическую ошибку в моем случае. Я перезапустил свой php и очистил кеш.
Как the symfony doc says for my symfony version (2.8) я сделал следующее:
MyBundle \ EventSubscriber \ MyEntityUpdatedEventSubscriber
<?php
namespace MyBundle\EventSubscriber;
use Doctrine\ORM\Event\OnFlushEventArgs;
use Doctrine\Common\EventSubscriber;
class MyEntityEventSubscriber implements EventSubscriber
{
public function __construct(MySuperService $myService)
{
$this->myService = $myService;
}
public function getSubscribedEvents()
{
return array(
'onFlush',
'postFlush',
);
}
public function onFlush(OnFlushEventArgs $args)
{
$uow = $args->getEntityManager()->getUnitOfWork();
foreach ($uow->getScheduledEntityInsertions() as $entity) {
// bla bla
}
//some interesting code
}
public function postFlush()
{
//Another interesting lines
}
}
Моя декларация услуг выглядит следующим образом:
MyBundle/Ресурсы/конфигурации/service.yml
services:
my_bundle.event.myentity_updated:
class: MyBundle\EventSubscriber\MyEntityUpdatedEventSubscriber
arguments:
- @my_super_service
tags:
- { name: doctrine.event_subscriber, connection: default }
И чтобы закончить, мой service.yml загружается в расширение расширения зависимостей связки пакетов.
MyBundle \ внедрение зависимости \ MyBundleExtension
[...]
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
[...]
Мой вопрос прост: Я что-то отсутствует?
Благодарим вас за ответ и ваш совет. Это список событий, выпущенных доктриной http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events. Мне нужно использовать эти события, но я попробовал «LifeCycle» (postUpdate) для тестирования. Это не входит в мою функцию вообще. Это похоже на то, что symfony не знает моего подписчика ... –
Можете ли вы попробовать объявить конфигурацию своей службы в 'app/config/services.yml'? На всякий случай, 'Bundle dependancy injection' не запускает сервис. – Jeet
Простите за эти две недели без ответа, у меня было много дел. Сегодня утром я вернулся к проблеме, и я только что увидел, что я не объявил свой внешний узел со слушателем в своем AppKernel ... Извините за пустую трату времени, я удалю этот вопрос сегодня днем, так как это не так. –