我有一个事件监听器,方法看起来像这样
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()
?
我无法找到明确显示文档
答案 0 :(得分:8)
您可以检查$controller[1]
值 - 它包含控制器的操作方法名称:
if ($controller[0] instanceof UserController) {
// limit this for Controller action editUser() only
if ($controller[1] === 'editUserAction') {
...
答案 1 :(得分:1)
如何抛出自定义异常并执行此操作:
wsObject
答案 2 :(得分:0)
也许您可以使用事件调度程序组件来创建自己的事件,并在您想要的操作中调度它。信息在这里:The EventDispatcher Component