2013-07-02 7 views
1

Есть ли способ Symfony2 вызвать функцию контроллера при каждой загрузке страницы? В моменте мое решение использует вызов ajax, но я хотел бы решить все это в бэкэнд-части. (конечно, без копирования имени функции для каждой функции контроллера)Выполнять функцию контроллера при каждой загрузке страницы

ответ

1

Вы можете создать Event Listener и обработать событие KernelEvents::CONTROLLER (перед фильтром), как described here.

Пример:
Акме \ 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(); 
    } 
} 

Акме \ 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 }