Мой вопрос: как разрешить использование debug
в шаблонах Twig в Silex?
Я играю с микро-фреймворком Silex (PHP-фреймворк, использующий Symfony).
При использовании системы шаблонов Twig я хотел выводить конкретный объект. Обычно я делаю это с var_dump($app);
и в Twig с {% debug app %}
.
Моя проблема заключается в получении отладки (и установка собственной отладки Silex на true
не помогает с Twig) для работы с Silex. Из коробки вызов debug
приведет к сообщению об ошибке:
Twig_Error_Syntax: Unknown tag name "debug" in...
Вызов для отладки выглядит следующим образом:
{% debug app %}
Я нашел ссылки на то, как настроить файл config.yml Twig для правильного использования debug
, но Silex не использует файл конфигурации для Twig.
Silex говорит, что вы можете установить опции через передачу ассоциативного массива в twig.options
, и в то время как в документах Twig говорится, что вы можете передавать параметры среды, такие как:
$twig = new Twig_Environment($loader, array('debug' => true));
Попытка передать его в Silex, например:
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.options' => array('debug' => true),
));
не работает. Это неправильный вариант? Просто неверное форматирование? Я понятия не имею, и ничего, что я попробовал, работает.
Я чувствую, что попадаю в режим "вращения колеса", поэтому я спрашиваю здесь об этом в надежде, что сегодня утром смогу перейти к более продуктивной работе. :)
(тьфу ... как это для гиперспецифического вопроса StackOverflow?)
Решение: (все это только для того, чтобы получить var_dump
функциональность ... о боже): Честно говоря, это было немного болезненно, и документы Silex были ничего не помогая в обнаружении этого, но вот что я должен был сделать, чтобы заставить это работать.
Сначала загрузите автозагрузчик Twig:
$app['autoloader']->registerPrefixes(array(
'Twig_Extensions_' => array(__DIR__.'/vendor/Twig-extensions/lib')));
Почему вы должны зарегистрировать его таким образом? Без понятия. Как он на самом деле находит автозагрузчик? Без понятия. Но это работает.
Зарегистрируйте провайдера и установите параметр отладки:
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/views',
'twig.class_path' => __DIR__.'/vendor/Twig/lib',
'twig.options' => array('debug' => true), //<-- this is the key line to getting debug added to the options
));
И наконец (лучшая часть):
$oldTwigConfiguration = isset($app['twig.configure']) ? $app['twig.configure']: function(){};
$app['twig.configure'] = $app->protect(function($twig) use ($oldTwigConfiguration) {
$oldTwigConfiguration($twig);
$twig->addExtension(new Twig_Extensions_Extension_Debug());
});
Если честно, я думаю, что мне достаточно Silex.
Кредит за это решение идет на Nerdpress.
* ниндзя редактировать: полтора года спустя я должен сказать, что Silex был для меня глупым. Я использовал Slim для всех нужд микро-фреймворка, и это фантастика. Выполняет работу быстро, чисто, просто и легко.