响应特定操作的事件侦听器

时间:2014-03-31 13:57:53

标签: symfony symfony-2.1

我有一个事件监听器,方法看起来像这样

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()

我无法找到明确显示文档

3 个答案:

答案 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