1

PHP DegugBar 有一个扩展来显示渲染了哪些 Twig 模板。

我在这里找到了一个演示,但如果你看看他们是如何做到的,他们实际上是用纯 PHP渲染布局,这违背了 Twig 的观点,它有自己的布局系统。

问题是一个 catch-22:我需要将调试栏渲染到一个 Twig 变量中,以便我可以将它放在 Twig 布局中,但是如果我已经渲染了调试栏,它将无法捕捉到我正在渲染 Twig 模板!

所以,我不知道该怎么做。有任何想法吗?

4

3 回答 3

0

创建自定义 Twig 扩展以呈现呈现调试栏所需的代码。这样,您可以执行{{ debug_bar() }}例如渲染调试栏:

class DebugBarExtension extends \Twig_Extension
{
    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('debug_bar', [$this, 'renderDebugBar']),
        ];
    }

    public function renderDebugBar()
    {
        // ... render and return the debug bar
    }
}
于 2016-01-23T10:12:24.717 回答
0

\DebugBar\JavascriptRenderer::renderOnShutdownWithHead可能有用。

即按照@Wouter 的建议创建一个Twig 函数,但不是立即渲染调试栏,而是将其注册为稍后渲染,就在关闭之前。

于 2016-02-05T22:35:08.663 回答
0

我不确定您为什么要使用 Twig 渲染 DebugBar,除非您尝试测量渲染性能或类似的东西(DebugBar IMO 不需要,因为它无论如何都不应该投入生产)。

在任何情况下,您都不需要特殊的插件、工件、类或代码来在 Twig 渲染页面中显示 DebugBar。您可以简单地执行以下操作:

1)在用于将变量发送到 Twig 的数组中添加 DebugBar 渲染的结果(HeadBody )。例子:

$template_vars['debugbar_Head'] = $debugbarRenderer->renderHead();
$template_vars['debugbar_Body'] = $debugbarRenderer->render();

2)在模板中添加变量:

<head>
  -- other stuff ---
  {{ debugbar_Head | raw }}
</head>

<body>
  {{ debugbar_Body | raw }}
  -- other stuff ---
</body>

重要提示:确保您的“debugbar_Head”位于head 标签的末尾,而“debugbar_Body”位于body 标签的开头(出于某种原因,它有助于防止罕见的渲染错误)。

3)正常渲染您的模板:

echo $view->render('your-template-path', $template_vars);

享受 Twig 呈现的页面,底部有一个功能齐全的 DebugBar。

注意:网络上有一些东西在宣传 Twig 和 DebugBar 的一些“混合”。请在尝试之前检查它们是否与框架无关。

于 2016-03-13T07:52:50.703 回答