いくつかのコードpost doctrineを実行したいときに問題が発生しました。エンティティを更新するとき、私の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');
}
[...]
私の質問は単純です:私は何かが足りないのですか?
ご回答いただきありがとうございます。これは、doctrine http://docs.doctrine-project.org/projects/doctrine-orm/ja/latest/reference/events.html#lifecycle-eventsで発生したイベントのリストです。私はこれらのイベントを使用する必要がありますが、テストするために 'LifeCycle'(postUpdate)を試しました。それは私の機能を全く通り抜けていません。 symfonyが私のサブスクライバを認識していないように思えます... –
'app/config/services.yml'でサービス設定を宣言できますか?場合に応じて、「バンドル依存性注入」はサービスを開始していません。 – Jeet
この2週間は申し訳ありませんが、私は多くのことをする必要がありました。私は今朝問題を取り上げて、私はAppKernelのリスナーと外部バンドルを宣言していないことを知りました。時間の無駄に申し訳ありませんが、今日のこの質問は削除されます。 –