Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 如何在持久化实体时创建事件侦听器_Symfony_Doctrine Orm - Fatal编程技术网

Symfony 如何在持久化实体时创建事件侦听器

Symfony 如何在持久化实体时创建事件侦听器,symfony,doctrine-orm,Symfony,Doctrine Orm,我对Symfony上的事件监听器非常陌生,我想找到一种好方法,在特定实体(即用户)被持久化时触发事件 我已经搜索了文档,虽然我找到了对onKernel事件的引用,但是我无法为我需要的创建一个监听器。你能给我指一下正确的方向或给我举个例子吗 这是一个很好的记录 基本上,您创建了一个实现doctor\Common\EventSubscriber的类,然后有了一个方法getSubscribedEvents()在其中添加要触发它的事件,它看起来像: public function getSubscrib

我对Symfony上的事件监听器非常陌生,我想找到一种好方法,在特定实体(即用户)被持久化时触发事件


我已经搜索了文档,虽然我找到了对onKernel事件的引用,但是我无法为我需要的创建一个监听器。你能给我指一下正确的方向或给我举个例子吗

这是一个很好的记录

基本上,您创建了一个实现
doctor\Common\EventSubscriber
的类,然后有了一个方法
getSubscribedEvents()
在其中添加要触发它的事件,它看起来像:

public function getSubscribedEvents()
{
    return ['postPersist'];
}

public function postPersist(LifecycleEventArgs $args)
{
    $object = $args->getEntity();

    if (!$object instanceof User) {
        return;
    }

    $this->doSomething($object);
}

这是很好的记录

基本上,您创建了一个实现
doctor\Common\EventSubscriber
的类,然后有了一个方法
getSubscribedEvents()
在其中添加要触发它的事件,它看起来像:

public function getSubscribedEvents()
{
    return ['postPersist'];
}

public function postPersist(LifecycleEventArgs $args)
{
    $object = $args->getEntity();

    if (!$object instanceof User) {
        return;
    }

    $this->doSomething($object);
}

您应该从
EventSubscriber
类实现,并且可以使用以下事件:

prePersist
preUpdate
postPersist
postUpdate

例如:

ApplicationBundle/EventSubscriber/EntitySubscriber.php

namespace App\ApplicationBundle\EventSubscriber;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;

/**
 * Class EntitySubscriber
 */
class EntitySubscriber implements EventSubscriber
{

    /**
     * Get subscribed events
     *
     * @return array
     */
    public function getSubscribedEvents()
    {
        return [
            'preUpdate',
        ];
    }

    /**
     * @param LifecycleEventArgs $args
     */
    public function preUpdate(LifecycleEventArgs $args)
    {
        /** @var PreUpdateEventArgs $args */
        $entity  = $args->getEntity();
        $changes = $args->getEntityChangeSet();
        dump($changes);
    }
}

您应该从
EventSubscriber
类实现,并且可以使用以下事件:

prePersist
preUpdate
postPersist
postUpdate

例如:

ApplicationBundle/EventSubscriber/EntitySubscriber.php

namespace App\ApplicationBundle\EventSubscriber;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;

/**
 * Class EntitySubscriber
 */
class EntitySubscriber implements EventSubscriber
{

    /**
     * Get subscribed events
     *
     * @return array
     */
    public function getSubscribedEvents()
    {
        return [
            'preUpdate',
        ];
    }

    /**
     * @param LifecycleEventArgs $args
     */
    public function preUpdate(LifecycleEventArgs $args)
    {
        /** @var PreUpdateEventArgs $args */
        $entity  = $args->getEntity();
        $changes = $args->getEntityChangeSet();
        dump($changes);
    }
}
完整性:

如果只需要在一个实体类(例如,
User
)上处理一个生命周期事件(例如,
prePersist
),则可以使用中记录的4个选项中的任何一个,但可能更合适的选项是生命周期回调或实体侦听器

生命周期回调示例:

在您的实体中:

namespace-App\Entity;
使用条令\ORM\Mapping作为ORM;
/**
*@ORM\Entity
*@ORM\HasLifecycleCallbacks完整性:

如果只需要在一个实体类(例如,
User
)上处理一个生命周期事件(例如,
prePersist
),则可以使用中记录的4个选项中的任何一个,但可能更合适的选项是生命周期回调或实体侦听器

生命周期回调示例:

在您的实体中:

namespace-App\Entity;
使用条令\ORM\Mapping作为ORM;
/**
*@ORM\Entity
*@ORM\HasLifecycleCallbacks