Как добавить 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
    }
}
Другие вопросы по тегам