Symfony添加事件侦听器

Symfony添加事件侦听器,symfony,Symfony,我使用symfony和easy admin,我想收听eventeasy\u admin.pre\u persist 在easy admin controller中,它按如下方式调用此事件: $this->dispatch(EasyAdminEvents::PRE_PERSIST, array('entity' => $entity)); $ed = $this->get('event_dispatcher'); $ed->addListener('ea

我使用symfony和easy admin,我想收听event
easy\u admin.pre\u persist

在easy admin controller中,它按如下方式调用此事件:

$this->dispatch(EasyAdminEvents::PRE_PERSIST, array('entity' => $entity));
    $ed = $this->get('event_dispatcher');

    $ed->addListener('easy_admin.pre_persist', function($e) {
        echo 'it works!';
        die();
    });
这是:

/** @Event("Symfony\Component\EventDispatcher\GenericEvent") */
const PRE_PERSIST = 'easy_admin.pre_persist';
如果我在同一控制器中为该事件添加侦听器,如下所示:

$this->dispatch(EasyAdminEvents::PRE_PERSIST, array('entity' => $entity));
    $ed = $this->get('event_dispatcher');

    $ed->addListener('easy_admin.pre_persist', function($e) {
        echo 'it works!';
        die();
    });
…它起作用了

但是我想在其他地方添加这个侦听器。我认为服务。yml将是一个很好的地方。我已经阅读了Sf文档,我应该这样添加服务:

# app/config/services.yml
services:
    app.exception_listener:
        class: AppBundle\EventListener\ExceptionListener
        tags:
            - { name: kernel.event_listener, event: kernel.exception }
但是有两个属性-名称和事件。我只知道事件名称,
easy\u admin.pre\u persist

它是如何工作的?此事件的
名称是什么
,什么是
事件

如果我可以为
easy\u admin.pre\u persist添加侦听器,那么如何将此侦听器添加到services.yml?

您需要知道侦听器的类和要调用的方法的名称。两者都依赖于easy admin(抱歉,从未使用过它)。因此,查看easy admin的代码,您需要知道侦听器的类和要调用的方法的名称。两者都依赖于easy admin(抱歉,从未使用过它)。因此,查看easy admin的代码

您可以在发布的使用symfony泛型事件的事件定义中看到,因此您应该侦听内核,标记名属性应该是kernel.event\u listener

# app/config/services.yml
services:
    app.exception_listener:
        class: YourBundle\EventListener\EasydminPrePersitListener
        tags:
            - { name: kernel.event_listener, event: easy_admin.pre_persist, method: onPrePersist }

在Listener类中,您需要在prepersist()上定义一个方法。

您可以在发布的事件定义中看到,它使用symfony泛型事件,因此您应该侦听内核,标记名属性应该是kernel.event\u Listener

# app/config/services.yml
services:
    app.exception_listener:
        class: YourBundle\EventListener\EasydminPrePersitListener
        tags:
            - { name: kernel.event_listener, event: easy_admin.pre_persist, method: onPrePersist }

在Listener类中,您需要定义一个方法onPrePersist()

我将给您一个非常简单的示例,但您需要根据自己的示例进行调整。它应该相当简单。它只会给你一个公平的想法,而不是一个真实的例子

有关更多示例:

UserController.php

class UserController
{
    ....

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

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

    ....
}
namespace Application\BackendBundle\Listener;

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

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

        if ($entity instanceof User) {
            // Do whatever you want
        }
    }
}
Services.yml

services:
    application_backend.listener.user_entity:
        class: Application\BackendBundle\Listener\UserEntityListener
        tags:
                - { name: doctrine.event_listener, event: prePersist }
UserControllerListener.php

class UserController
{
    ....

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

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

    ....
}
namespace Application\BackendBundle\Listener;

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

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

        if ($entity instanceof User) {
            // Do whatever you want
        }
    }
}

我会给你一个非常简单的例子,但你需要适应你的。它应该相当简单。它只会给你一个公平的想法,而不是一个真实的例子

有关更多示例:

UserController.php

class UserController
{
    ....

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

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

    ....
}
namespace Application\BackendBundle\Listener;

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

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

        if ($entity instanceof User) {
            // Do whatever you want
        }
    }
}
Services.yml

services:
    application_backend.listener.user_entity:
        class: Application\BackendBundle\Listener\UserEntityListener
        tags:
                - { name: doctrine.event_listener, event: prePersist }
UserControllerListener.php

class UserController
{
    ....

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

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

    ....
}
namespace Application\BackendBundle\Listener;

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

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

        if ($entity instanceof User) {
            // Do whatever you want
        }
    }
}