2012-03-13 206 views
1

我正在使用Symfont RC5,我試圖讓事件監聽器prePersist啓動。Symfony2 Event_listener not firing

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了幾個版本回
  • 我試過在配置「標籤」屬性的各種組合。
  • 我禁用生命週期註解,我在選舉中有實體(櫃面有一些衝突)
  • 我看在控制檯日誌,事件......,試圖找到問題的任何提及

我正在使用Sonata的CRUD。不知道這是否有任何分歧。

回答

0

嘗試

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 2012-04-11 06:44:52

0

也許這不是問題,但使用的是很舊的symfony版本。也許試着先升級到最新的穩定版(現在2.0.12)

+0

只是在2.0.12與奏鳴曲管理它測試它不工作,他是正確的,但preUpdate被解僱,但有一個錯誤的變化 – worenga 2012-03-26 15:08:06

0

有同樣的問題。

只用Symfony 2.0.12(當前版本)和奏鳴曲同樣的方式,它似乎並不奏效。我現在正在爲我的需要使用onFlush事件。

似乎SonataDoctrineORMAdmin沒有計算Changeset權限,因爲每個Field都會更新,因此您必須手動檢查。

+0

我結束了: - – user1267674 2012-04-11 06:42:32

+1

你能解釋你在那裏做了什麼? ;) – worenga 2012-04-13 13:46:28

0

我的src/Acme的/ 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) 
    { 
. 
. 
. 
    } 
. 
. 
. 
. 
}