PHP DegugBar 有一个扩展来显示渲染了哪些 Twig 模板。
我在这里找到了一个演示,但如果你看看他们是如何做到的,他们实际上是用纯 PHP渲染布局,这违背了 Twig 的观点,它有自己的布局系统。
问题是一个 catch-22:我需要将调试栏渲染到一个 Twig 变量中,以便我可以将它放在 Twig 布局中,但是如果我已经渲染了调试栏,它将无法捕捉到我正在渲染 Twig 模板!
所以,我不知道该怎么做。有任何想法吗?
PHP DegugBar 有一个扩展来显示渲染了哪些 Twig 模板。
我在这里找到了一个演示,但如果你看看他们是如何做到的,他们实际上是用纯 PHP渲染布局,这违背了 Twig 的观点,它有自己的布局系统。
问题是一个 catch-22:我需要将调试栏渲染到一个 Twig 变量中,以便我可以将它放在 Twig 布局中,但是如果我已经渲染了调试栏,它将无法捕捉到我正在渲染 Twig 模板!
所以,我不知道该怎么做。有任何想法吗?
创建自定义 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
}
}
\DebugBar\JavascriptRenderer::renderOnShutdownWithHead
可能有用。
即按照@Wouter 的建议创建一个Twig 函数,但不是立即渲染调试栏,而是将其注册为稍后渲染,就在关闭之前。
我不确定您为什么要使用 Twig 渲染 DebugBar,除非您尝试测量渲染性能或类似的东西(DebugBar IMO 不需要,因为它无论如何都不应该投入生产)。
在任何情况下,您都不需要特殊的插件、工件、类或代码来在 Twig 渲染页面中显示 DebugBar。您可以简单地执行以下操作:
1)在用于将变量发送到 Twig 的数组中添加 DebugBar 渲染的结果(Head和Body )。例子:
$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 的一些“混合”。请在尝试之前检查它们是否与框架无关。