繁体   English   中英

Symfony PHP事件监听器不起作用

[英]Symfony PHP Event Listener not working

我有一个系统,用户可以在其中创建订单。 一旦创建了订单,就应使用创建订单的当前用户,创建时间和其他信息来更新另一个实体表。

基本上是一个日志。

这是我的侦听器类;

namespace Qi\Bss\BaseBundle\Lib\PurchaseModule;

use Qi\Bss\BaseBundle\Entity\Business\PurchaseModule\PmodLog;
use Qi\Bss\BaseBundle\Entity\Business\PurchaseModule\PmodOrder;

use Doctrine\ORM\Event\LifecycleEventArgs;

/**
 * Class OrderLogger. Purchase Module activity logger.
 */
class OrderLogger
{
    /**
     * Service container
     * @var type 
     */
    private $serviceContainer;

    /**
     * Performs tasks before destruction
     * @ORM\PostPersist
     */
    public function postPersist(LifecycleEventArgs $args)
    {
        $order = $args->getEntity();

        if ($order instanceof PmodOrder) {
            $logRecord = new PmodLog();

            $user = $this->serviceContainer->get('security.token_storage')->getToken()->getUser();

            $logRecord->setCreatedBy($user);
            $logRecord->setAction('Gemaak');
            $logRecord->setCreatedAt(new \DateTime());
            $logRecord->setOrder($order);
            $logRecord->setDepartment($user->getDepartment());
        }
    }

    /**
     * Sets the sales order exporter object
     * @param type $serviceContainer
     */
    public function setServiceContainer($serviceContainer)
    {
        $this->serviceContainer = $serviceContainer;
    }
}

我没有弄错我在做什么,数据库中的日志表也没有得到更新。

这也是我的服务;

bss.pmod.logger:
    class: Qi\Bss\BaseBundle\Lib\PurchaseModule\OrderLogger
    calls:
    - [ setServiceContainer, [@service_container] ]
    tags:
        - { name: doctrine.event_listener, event: postPersist }

我没有收到错误,订单已完美创建,但日志数据库仍然为空。

好吧,您是否不需要坚持刷新 $logRecord 您可以从$args获取实体管理器。

您可以对此进行调整。 在有人创建User实体后, UserLog通过从User实体插入一些数据来创建新的UserLog实体/记录。

控制者

public function createAction()
{
    $user = new User();
    $user->setUsername('username');
    $user->setPassword('password');

    $this->entityManager->persist($user);
    $this->entityManager->flush();
}

Services.yml

services:
    application_backend.event_listener.user_entity:
        class: Application\BackendBundle\EventListener\UserEntityListener
        tags:
                - { name: doctrine.event_listener, event: postPersist }

UserEntityListener.php

namespace Application\BackendBundle\EventListener;

use Application\BackendBundle\Entity\User;
use Application\BackendBundle\Entity\UserLog;
use Doctrine\ORM\Event\LifecycleEventArgs;

class UserEntityListener
{
    public function postPersist(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();

        if ($entity instanceof User) {
            $log = new UserLog();
            $log->setUserId($entity->getId());
            $log->setMessage('postPersist at ' . date('d/m/Y H:i:s'));

            $em = $args->getEntityManager();
            $em->persist($log);
            $em->flush();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM