Я хотел бы выполнить код перед всеми действиями в моем проекте (для вычисления важной глобальной переменной). Как установить функцию предварительного действия в моих контроллерах?
Выполнить код перед действием контроллера
Ответ 1
В Symfony2 нет метода предварительного действия. Вы должны использовать прослушиватели событий для этой цели.
Ответ 2
Вероятно, использование прослушивателей - более элегантный способ реализовать "после инициализированных задач контроллера", но есть более упрощенный способ сделать это:
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Override method to call #containerInitialized method when container set.
* {@inheritdoc}
*/
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
$this->containerInitialized();
}
/**
* Perform some operations after controller initialized and container set.
*/
private function containerInitialized()
{
// some tasks to do...
}
Вставьте этот код в свой контроллер или, если хотите, вы можете даже вставить его в базовую родительскую абстракцию ваших контроллеров.
потому что контейнер будет установлен для каждого контроллера, когда его инициализируется, мы можем переопределить метод setContainer
для выполнения некоторых задач после установки контейнера.
Ответ 3
Вы должны особенно прочитать эту страницу документации: http://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html