2016-09-28 5 views
0

いくつかのコード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'); 
    } 
[...] 

私の質問は単純です:私は何かが足りないのですか?

答えて

0

あなたはonFlushpostFlushという2つのイベントを購読していることに気付きました。文書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が表示される場合があります。私が一度それに直面したようにちょうど言及。

+0

ご回答いただきありがとうございます。これは、doctrine http://docs.doctrine-project.org/projects/doctrine-orm/ja/latest/reference/events.html#lifecycle-eventsで発生したイベントのリストです。私はこれらのイベントを使用する必要がありますが、テストするために 'LifeCycle'(postUpdate)を試しました。それは私の機能を全く通り抜けていません。 symfonyが私のサブスクライバを認識していないように思えます... –

+1

'app/config/services.yml'でサービス設定を宣言できますか?場合に応じて、「バンドル依存性注入」はサービスを開始していません。 – Jeet

+0

この2週間は申し訳ありませんが、私は多くのことをする必要がありました。私は今朝問題を取り上げて、私はAppKernelのリスナーと外部バンドルを宣言していないことを知りました。時間の無駄に申し訳ありませんが、今日のこの質問は削除されます。 –

関連する問題