Выполнять код после каждого действия в Symfony 1.4 - PullRequest
5 голосов
/ 22 ноября 2011

Я знаю, что мы можем использовать фильтры для создания кода перед каждым действием в Symfony, но как быть с каждым выполненным действием? метод PostExecute?

Ответы [ 3 ]

10 голосов
/ 22 ноября 2011

Вы также можете использовать фильтры для выполнения кода после выполнения:

class myFilter extends sfFilter {

    public function execute($filterChain) {

        // Code that is executed before the action is executed

        $filterChain->execute();

        // Code that is executed after the action has been executed

    }

}

Это потому, что полное выполнение в Symfony представляет собой одну большую «цепочку фильтров» ... Если вы внимательно посмотрите на filters.yml, вы увидите, что сначала вызывается фильтр rendering, а затем security фильтр, фильтр cache и, наконец, фильтр execution. Фильтр выполнения - это фильтр, который фактически выполняет запрос (вызывает контроллер и все остальное).

Чтобы проиллюстрировать это: фильтр кэша, прежде чем идти по цепочке, проверит, доступен ли в кэше действительный вывод, и вернет его. Если сейчас он выполнит следующий фильтр в цепочке, а когда вернется, сохраните выходные данные, чтобы последующие запросы могли использовать кеш.

2 голосов
/ 22 ноября 2011

Вы должны добавить этот метод в класс действий:

  public function postExecute()
  {
    // do something
  }
1 голос
/ 22 ноября 2011

метод postExecute выполняется в конце каждого вызова действия.
Вот документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...