我使用symfony和easy admin,我想听事件easy_admin.pre_persist
。
在简单的管理控制器中,它会调用此事件:
$this->dispatch(EasyAdminEvents::PRE_PERSIST, array('entity' => $entity));
这就是:
/** @Event("Symfony\Component\EventDispatcher\GenericEvent") */
const PRE_PERSIST = 'easy_admin.pre_persist';
如果我在同一个控制器中为此事件添加侦听器,请执行以下操作:
$ed = $this->get('event_dispatcher');
$ed->addListener('easy_admin.pre_persist', function($e) {
echo 'it works!';
die();
});
......它有效。
但我想在其他地方添加这个监听器。我认为services.yml将是它的好地方。我在Sf文档中读过,我应该这样添加服务:
# app/config/services.yml
services:
app.exception_listener:
class: AppBundle\EventListener\ExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception }
但有两个属性 - 名称和事件。我只知道事件名称easy_admin.pre_persist
。
它是如何工作的?此事件的name
是什么,event
是什么?
如果我可以为easy_admin.pre_persist
添加监听器,我该如何将此监听器添加到services.yml?
答案 0 :(得分:3)
我会给你一个非常简单的例子,但你需要让它适应你的。它应该相当简单。它只会给你一个公平的想法,而不是一个真实的例子。
更多示例:http://www.inanzzz.com/index.php/posts/symfony
<强> UserController.php 强>
class UserController
{
....
public function createAction()
{
$user = new User();
$user->setUsername('username');
$user->setPassword('password');
$this->entityManager->persist($user);
$this->entityManager->flush();
}
....
}
<强> Services.yml 强>
services:
application_backend.listener.user_entity:
class: Application\BackendBundle\Listener\UserEntityListener
tags:
- { name: doctrine.event_listener, event: prePersist }
<强> UserControllerListener.php 强>
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
}
}
}
答案 1 :(得分:2)
您需要知道侦听器的类和要调用的方法的名称。两者都取决于简单的管理员(对不起,从未使用它)。所以看看简单的管理员代码
答案 2 :(得分:1)
您可以在发布的事件定义中看到使用symfony泛型事件,因此您应该监听内核并且标记名称属性应该是kernel.event_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()
的方法