Reputation: 15504
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
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