2016-06-14 180 views
1

嗨,我特林做Symfony的事件監聽器此文檔以下: http://symfony.com/doc/2.8/cookbook/doctrine/event_listeners_subscribers.htmlSymfony的事件監聽器

<?php 

namespace FM\AppBundle\EventListener; 

use Doctrine\ORM\Event\LifecycleEventArgs; 
use FM\AdminBundle\Entity\Address\BillingAddress; 

class BillingAdressListener 
{ 
    /** 
    * @param LifecycleEventArgs $args 
    */ 
    public function listenBillingAdress(LifecycleEventArgs $args) 
    { 
     $entity = $args->getEntity(); 

     if(!$entity instanceof BillingAddress){ 
      return; 
     } 

     $this->postPersist($args); 
    } 

    /** 
    * @param LifecycleEventArgs $args 
    */ 
    public function postPersist(LifecycleEventArgs $args) 
    { 
     $em = $args->getEntityManager(); 
     $billingAdress = $args->getEntity(); 

     dump($billingAdress); die(); 
    } 
} 

service.yml

billing_adress.listener: 
     class: FM\AppBundle\EventListener\BillingAdressListener 
     tags: 
      - { name: doctrine.event_listener, event: listenBillingAdress } 

但是當我提交什麼也沒有發生與BillingAddress對象一起形成。

我做錯了什麼?

+0

您是否創建了suscriber類?否則請參閱Doctrine doc:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html –

+0

如何提升'listenBillingAdress'事件? –

+0

我沒有舉辦活動* Suscriber *,但一個活動*聽衆* – Kevin

回答

0

我的壞,我沒有做一個堅持而是更新

它與堅持

這裏是我現在的代碼:

<?php 

namespace FM\AppBundle\EventListener; 

use Doctrine\ORM\Event\LifecycleEventArgs; 
use FM\AdminBundle\Entity\Address\BillingAddress; 

class BillingAddressListener 
{ 
    /** 
    * @param LifecycleEventArgs $args 
    */ 
    public function prePersist(LifecycleEventArgs $args) 
    { 
     $entity = $args->getEntity(); 

     if(!$entity instanceof BillingAddress){ 
      return; 
     } 

     $this->addNameToUser($args); 
    } 

    /** 
    * @param LifecycleEventArgs $args 
    */ 
    public function addNameToUser(LifecycleEventArgs $args) 
    { 
     /** @var BillingAddress $billingAdress */ 
     $billingAdress = $args->getEntity(); 
     $user = $billingAdress->getOwner(); 

     if(empty($user->getFirstName())) $user->setFirstName($billingAdress->getFirstName()); 
     if(empty($user->getLastName())) $user->setLastName($billingAdress->getLastName()); 
    } 
} 

而且我有打電話給prePersist方法。 我是這樣做的。

billing_address.listener: 
    class: FM\AppBundle\EventListener\BillingAddressListener 
    tags: 
     - { name: doctrine.event_listener, event: prePersist } 
0

它在學說中被稱爲實體聽衆。這裏是documentation

不要忘記添加您的實體偵聽器的映射。例如XML映射:

<entity name="AppBundle\Entity\AssignmentAttempt" table="app_assignment_attempt" > 
    <entity-listeners> 
     <entity-listener class="AppBundle\EntityListener\AssignmentAttemptListener"> 
      <lifecycle-callback type="prePersist" method="prePersist"/> 
      <lifecycle-callback type="preUpdate" method="preUpdate"/> 
     </entity-listener> 
    </entity-listeners> 
    <!-- Rest mapping --> 
</entity> 

在配置,你可以簡單地添加

app.entity_listener.assignment_attempt: 
    class: AppBundle\EntityListener\AssignmentAttemptListener 
    tags: 
     - { name: doctrine.orm.entity_listener }