добавление хука в symfony для кода, который будет выполнен после рендеринга страницы - PullRequest
0 голосов
/ 19 сентября 2011

Я заинтересован в создании статистики страниц на основе того же кода, который использует sfWebDebugPanel *. проблема в том, что когда я использую его в предварительном выполнении фильтра, я не могу получить количество SQL-запросов, потому что ни один из них еще не был выполнен (действия и их последующие вызовы модели еще не были выполнены)

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

rendering: ~
security:  ~
cache:     ~
execution: ~
statistics:
  class: myStatistics

однако это работает:

rendering: ~
security:  ~
cache:     ~
statistics:
  class: myStatistics
execution: ~

но не возвращает SQL-запросы. какие-либо предложения?

1 Ответ

1 голос
/ 19 сентября 2011

У меня нет под рукой инструментов для рисования, но вы должны рассматривать рендеринг как улицу с двусторонним движением ... Сначала вызывается фильтр rendering. Это делает «некоторые вещи», а затем вызывает функцию, которая выполняет фильтр security. В этом фильтре проверяется ваша авторизация, если не все в порядке, запрос перенаправляется и стек фильтров вызывается снова, если авторизация в порядке, вызывается следующий фильтр в цепочке. Фильтр кэша возвращает страницу из стека, если она действительна, в противном случае запускается фильтр выполнения. Затем, когда запустился фильтр выполнения, фильтр кеша (который назывался фильтром выполнения) теперь содержит текущие исполняемые данные и сохраняет их в кеше, затем для последней части запускается фильтр безопасности и т. Д.

Итак, типичная реализация фильтра выглядит следующим образом:

  public function execute($filterChain)
  {
    doSomething();
    // Code that is called before execution.

    // Runs all down stream filters
    $filterChain->execute();

    doSomethingElse();
    // Code that is called after execution.
  }

Итак, вы хотите вести статистику после выполнения, в части doSomethingElse().

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