Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Response Event listener for a specific action

I have an event listener, with a method looking like this

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

        }
    }


}

my services.yml looks like this

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 }

the problem is the listener runs for every action executed in that user controller, which i do not want.

My question is how I can limit to be running at the response of a specific action only. Let us say editUser() ?

I was not able to find this explicitly shown the documentation

like image 579
Confidence Avatar asked Oct 17 '25 13:10

Confidence


1 Answers

You can check $controller[1] value - it contains controller's action method name:

if ($controller[0] instanceof UserController) {

    // limit this for Controller action editUser() only
    if ($controller[1] === 'editUserAction') {

         ...
like image 130
sunsay Avatar answered Oct 22 '25 01:10

sunsay