【发布时间】:2014-05-10 21:47:47
【问题描述】:
我有一个事件监听器,其方法如下所示
public function onKernelResponse(FilterResponseEvent $event,EntityManager $entityManager)
{
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
if ($controller[0] instanceof UserController) {
//@TODO limit this for Controller action editUser() only
$response = $event->getResponse()->getContent();
$responseDecoded = json_decode($response);
if ($responseDecoded instanceof UserProperties) {
}
}
}
我的 services.yml 看起来像这样
update_user_controller_listener_marking_tasks:
class: Company\UserResultBundle\EventListener\UserEditListener
arguments: [@doctrine.orm.entity_manager]
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
问题是侦听器针对该用户控制器中执行的每个操作运行,这是我不想要的。
我的问题是我如何才能限制只在特定操作的响应下运行。让我们说editUser()?
我找不到这个明确显示的文档
【问题讨论】:
-
如果您需要运行的代码特定于特定控制器上的特定方法,为什么不将其放入该控制器方法而不是事件中?
-
我只是不想让控制器在调用其他服务时过于混乱。
-
如果您使用事件来解耦不应该真正解耦的东西,它往往会不必要地混淆代码。您打算从事件侦听器调用哪些服务?
标签: symfony symfony-2.1