DomingoSL
DomingoSL

Reputation: 15504

Execute a controller's function on every page load

Is there a way on Symfony2 to call a controller function on each page load? At the momment my solution is using an ajax call, but i'll like to solve this all in the backend part. (ofcourse without having to copy the function name on each controller function)

Upvotes: 1

Views: 2369

Answers (1)

jkucharovic
jkucharovic

Reputation: 4244

You can create Event Listener and handle KernelEvents::CONTROLLER event with it (before filter), as described here.

Example:
Acme\DemoBundle\EventListener\DemoListener.php

namespace Acme\DemoBundle\EventListener;

use Symfony\Component\HttpKernel\Event\FilterControllerEvent;

class DemoListener
{
    public function onKernelController(FilterControllerEvent $event)
    {
        $controller = $event->getController();

        /*
         * $controller passed can be either a class or a Closure.
         * This is not usual in Symfony2 but it may happen.
         * If it is a class, it comes in array format
         */
        if (!is_array($controller)) {
            return;
        }

        $controller[0]->fooBarMethod();
    }
}

Acme\DemoBundle\Resources\services.yml

parameters:
    acme_demo.event_listener.class: Acme\DemoBundle\EventListener\DemoListener
services:
    acme_demo.event_listener:
        class: %acme_demo.event_listener.class%
        tags:
            - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }

Upvotes: 1

Related Questions