Symfony添加事件侦听器
我使用symfony和easy admin,我想收听eventSymfony添加事件侦听器,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
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
}
}
}