在symfony中添加一个钩子,用于在呈现页面后执行的代码

时间:2011-09-18 21:01:48

标签: symfony1

我对基于sfWebDebugPanel *使用的相同代码构建页面统计信息感兴趣。问题是当我在过滤器预执行中使用它时,我无法获得SQL查询的计数因为到目前为止没有运行(操作及其后续模型调用尚未执行)

所以当我将我的过滤器添加到过滤器的末尾时,它似乎根本就没有运行。它看起来像:

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

然而这有效:

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

但不返回SQL查询。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我手边没有任何绘图工具,但您必须将渲染视为双向街道......首先调用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()部分。

中进行统计