2013-07-11 65 views
0

它我VisitorController堆在学说PostPersist事件侦听器

public function chooseVisitor($zone) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $lvisitor = $em->getRepository('EMRSabaBundle:Personel')->findOneBy(array('status' => '1', 'lastv' => '1', 'zone' => $zone)); 
    $id = $lvisitor->getId(); 
    $lvisitor->setLastv(0); 


    $newvisitorid = $em->getRepository('EMRSabaBundle:Personel')->findNewVisitor($id); 
    $newvisitorid = $newvisitorid[0]; 
    $newvisitor = $em->getRepository('EMRSabaBundle:Personel')->find($newvisitorid); 
    $newvisitor->setLastv(1); 

    $em->flush(); 

    return $newvisitor; 
} 

public function defineZone($Customer) 
{ 
    $phone = substr($Customer,1); 
    switch ($phone) 
    { 
     case 2: 
      $zone = 1; 
      break; 
     case 4: 
      $zone = 1; 
      break; 
     case 8: 
      $zone = 2; 
      break; 
     case 7: 
      $zone = 3; 
      break; 
    } 

    return $zone; 
} 

EventListener

namespace EMR\SabaBundle\EventListener; 

use Doctrine\ORM\Event\LifecycleEventArgs; 
use EMR\SabaBundle\Entity\Orders; 
use EMR\SabaBundle\Entity\Visit; 
use EMR\SabaBundle\Controller\VisitController; 

class EntityListener { 

    public function postPersist(LifecycleEventArgs $args) 
    { 
     $orders = $args->getEntity(); 
     $em = $args->getEntityManager(); 
     if ($orders instanceof Orders){ 
      if ($orders->getStatus() == 1){ 
       $VC = new VisitController(); 
       $zone = $VC->defineZone($orders->getCustomer()->getId()); 
       $personel = $VC->chooseVisitor($zone); 
       $visit = new Visit(); 
       $visit->setDate(new \DateTime()); 
       $visit->setStatus(0); 
       $visit->setOrders($orders); 
       $visit->setPersonel($personel); 

       $em->persist($visit); 
       $em->flush(); 
      } 
     } 
    } 
} 

&我services.yml

entity.listener: 
    class: EMR\SabaBundle\EventListener\EntityListener 
    tags: 
     - { name: doctrine.event_listener, event: postPersist } 

我想创建&坚持新访问的时候,为了实体状态为1 我不知道问题出在哪里&如何调试事件监听器

谁能给我一只手来完成这项工作

回答

0

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#postupdate-postremove-postpersist

postUpdate,删除后,postPersist

这三个post事件在EntityManager#flush()中调用。此处的更改 与数据库中的持久性无关,但您可以使用这些事件来更改非持久性项目,如未映射的 字段,日志记录或甚至由 原则直接映射的关联类。

尝试prePersist事件。

+0

我发现并解决了我的方法中的2个小问题 – EMR