2012-03-13 5 views
1

私はSymfont RC5を使用していますが、イベントリスナーprePersistを起動しようとしています。Symfony2 Event_listenerが起動しない

私が持っている app/config/config.yml

: -

services: 
    recordmanagement: 
     class: FNQITServices\BMBundle\Listener\RecordManagement 
     tags: 
     - { name: doctrine.event_listener, event: prePersist } 

そして、私はsrc/FNQITServices/BMBundle/Listener/RecordManagement.phpクラスを作成しました: -

<?php 
namespace FNQITServices\BMBundle\Listener; 

use Doctrine\ORM\Event\LifecycleEventArgs; 
use FNQITServices\BMBundle\Entity\Elections; 
use FNQITServices\BMBundle\Entity\People; 

class RecordManagement 
{ 
    public function prePersist(LifecycleEventArgs $args) 
    { 
     `echo "amibeingcalled" > /tmp/test`; 

     $entity = $args->getEntity(); 
     $entityManager = $args->getEntityManager(); 

     // perhaps you only want to act on some "Product" entity 
     if ($entity instanceof Elections) { 
      $person = $this->getDoctrine() 
         ->getRepository('FNQITServicesBMBundle:People') 
         ->find(2); 

      $entity->setCreator($person); 
     } 
    } 
} 

しかし、イベントが挿入時にオフに解雇されていません。ファイル/tmp/testは作成されていません。

  • 私はkernel.event_listenerがあることに気づいたと私は、これは私が設定の「タグの属性の様々な組み合わせを試してみたバック
  • kernel.listenerいくつかのバージョンにするために使用ことに気づきました。私は(いくつかの競合があった包み)
  • 私はコンソールログで見てきた、選挙エンティティでのイベント...試してみて、問題の一切の言及を見つけるために持っていた
  • I無効ライフサイクル注釈

私はSonataのCRUDを使用しています。違いがあれば分かりません。

答えて

0

は、多分それは問題ではないのですが、あなたは非常に古いsymfonyのバージョンを使用している

services: 
recordmanagement: 
    class: FNQITServices\BMBundle\Listener\RecordManagement 
    tags: 
     - { name: doctrine.event_listener, event: prePersist, method: testMethod } 

<?php 
    namespace FNQITServices\BMBundle\Listener; 

    use Doctrine\ORM\Event\LifecycleEventArgs; 
    use FNQITServices\BMBundle\Entity\Elections; 
    use FNQITServices\BMBundle\Entity\People; 

    class RecordManagement 
    { 
     public function testMethod(LifecycleEventArgs $args) 
     { 
      ... 
     } 
    } 
+0

かなり確信して私はこのようなことを試みました... src/ACME/BMBundle/Resources/configの下にservices.xmlを作成してしまい、リスナー定義を取得したようです。ですから、config.ymlでそれを持つことが問題でした。 – user1267674

0

を試してみてください。おそらく最初に最新の安定版(現在は2.0.12)にアップグレードしようとします。

+0

2.0.12の2.0.12でそれを試してみてください。それは正しく動作しませんが、preUpdateは実行されますが、間違ったチェンジセットがあります。 – worenga

0

同じ問題があります。

Symfony 2.0.12(現在のバージョン)とソナタと同じ方法で試してみると動作しないようです。今私のニーズにonFlushイベントを使用しています。

SonataDoctrineORMAdminは、すべてのフィールドが常に更新されるため、Changeset権限を計算していないようです。そのため、手動でチェックする必要があります。

+0

私は最後に置くことになりました: - – user1267674

+1

あなたはそこで何をしましたか? ;) – worenga

0

次のように私はSRC /アクメ/ BMBundle /リソース/設定内services.xmlの作成: -

<?xml version="1.0" ?> 

<container xmlns="http://symfony.com/schema/dic/services" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> 

    <services> 
     <service id="acme_bm.listener" class="ACME\BMBundle\Listener\RecordManagement"> 
      <argument type="service" id="service_container" /> 
      <tag name="doctrine.event_listener" event="prePersist" method="prePersist"/> 
     </service> 
     <service id="acme_bm.listener2" class="ACME\BMBundle\Listener\RecordManagement"> 
      <argument type="service" id="service_container" /> 
      <tag name="doctrine.event_listener" event="preUpdate" method="preUpdate"/> 
     </service> 
    </services> 
</container> 

次のようにその後、私はリスナー/ RecordManagement.phpを作成しました: -

<?php 
namespace ACME\BMBundle\Listener; 

use Doctrine\ORM\Event\LifecycleEventArgs; 
use Doctrine\ORM\Event\PreUpdateEventArgs; 
use Symfony\Component\DependencyInjection\ContainerInterface; 

class RecordManagement 
{ 
    protected $container; 

    public function __construct(ContainerInterface $container) 
    { 
     $this->container = $container; 
    } 


    public function prePersist(LifecycleEventArgs $args) 
    { 
. 
. 
. 
    } 
. 
. 
. 
. 
} 
関連する問題