当我想执行一些代码帖子与订阅者Flush时,我遇到了一个问题。当我更新实体时,我的on/post flush
函数不会被执行。
我在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将加载到bundle dependency dependency extension中。
MyBundle \ DependencyInjection \ 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');
}
[...]
我的问题很简单:我错过了什么吗?
答案 0 :(得分:0)
我注意到您已订阅onFlush
和postFlush
两个事件。如果您看到文档here,我就没有看到任何此类事件。
但是我总是使用以下活动,他们会满足我的所有要求。
/**
* Hook to the events that need to be subscribed!!
* @return array
*/
public function getSubscribedEvents()
{
return array(
'prePersist',
'postPersist',
'preUpdate',
'postUpdate',
'postDelete',
);
}
还有一件事:
如果您的服务@my_super_service
需要@doctrine.orm.entity_manager
作为其参数之一,您可能会看到一些infinite dependency loop
。刚提到我曾经面对过一次。