Symfony 后置事件侦听器上的堆栈

Symfony 后置事件侦听器上的堆栈,symfony,doctrine,event-listener,Symfony,Doctrine,Event Listener,这是我的VisitorController类 public function chooseVisitor($zone) { $em = $this->getDoctrine()->getManager(); $lvisitor = $em->getRepository('EMRSabaBundle:Personel')->findOneBy(array('status' => '1', 'lastv' => '1', 'zone' =>

这是我的
VisitorController

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();
            }
        }
    }
}
&my
services.yml

    entity.listener:
    class: EMR\SabaBundle\EventListener\EntityListener
    tags:
        - { name: doctrine.event_listener, event: postPersist }
我想在订单实体状态为1时创建并保留新访问 我不知道问题出在哪里&如何调试事件侦听器

谁能帮我完成这项工作

姿势更新、移除后、粘贴后

这三个post事件在EntityManager#flush()内部调用。变化 在这里,它们与数据库中的持久性无关,但是 可以使用这些事件来更改非持久性项,如非映射项 由直接映射的字段、日志记录甚至关联类 教义

尝试预科活动