Как добавить PHP DebugBar в макет Twig?
PHP DegugBar имеет расширение для отображения, какие шаблоны Twig были обработаны.
Я нашел здесь демонстрацию, но если вы посмотрите на то, как они это делают, они фактически отображают макет на чистом PHP, что в некотором роде побеждает точку Twig, которая имеет свою собственную систему макетов.
Проблема заключается в уловке 22: мне нужно отобразить панель отладки в переменную Twig, чтобы я мог поместить ее в макет Twig, но если я уже отрисовал панель отладки, она не сможет уловить тот факт, что я отрисовываю шаблон Twig!
Итак, я не уверен, как это сделать. Есть идеи?
3 ответа
\DebugBar\JavascriptRenderer::renderOnShutdownWithHead
может быть полезным.
т.е. создайте функцию Twig, как предлагает @Wouter, но вместо немедленной визуализации панели отладки зарегистрируйте ее для визуализации позже, непосредственно перед выключением.
Я не уверен, почему вы хотите визуализировать DebugBar с помощью Twig, если только вы не пытаетесь измерить производительность рендеринга или что-то в этом роде (что не нужно для DebugBar IMO, потому что он все равно никогда не достигнет производства).
В любом случае вам не нужен специальный плагин, артефакт, класс или код для отображения DebugBar на странице, отображаемой Twig. Вы можете просто сделать следующее:
1) Добавьте результат рендеров DebugBar (Head и Body) в массив, который вы используете для отправки переменных в Twig. Пример:
$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. Пожалуйста, прежде чем пробовать их, проверьте, не связаны ли они с фреймворком.
Создайте пользовательское расширение 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
}
}