Вопрос по symfony – Выполнить код перед действием контроллера

25

Я хотел бы выполнить код перед всеми действиями в моем проекте (чтобы вычислить важную глобальную переменную). Как установить функцию предварительного действия в моих контроллерах?

Ваш Ответ

3   ответа
11

Вы должны особенно прочитать эту страницу документации:http://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html

16

Возможно, использование слушателей является более элегантным способом реализации «после инициализации контроллера», но есть более упрощенный способ сделать это:

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 способ выполнения некоторых задач после установки контейнера.

Отличный ответ. Оно работает. Я выберу этот путь.
Это необходимоuse Symfony\Component\DependencyInjection\ContainerInterface;
Пожалуйста, не делайте этого, это очень, очень, очень, очень, очень плохой способ сделать это.
@ Beno & # xEE; t: Не могли бы вы объяснить, почему это так плохо? Большое спасибо !
Интересно! Я проверю это :) bux
26

Там нетpre-action метод в Symfony2. Вы должны использоватьслушатели событий для этой цели.

Мне нужно добавить, что хотя сам по себе метод предварительного действия не существует, событиеkernel.controller это, вероятно, то, что вы хотите.
чертовски хорошо Благодарности;) bux

Похожие вопросы