Мой вопрос: как разрешить использование 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),
));
Не работает. Это неправильный вариант? Просто неправильное форматирование? Я понятия не имею, и ничего из того, что я пробовал, не работает.
Я чувствую, что вхожу в режим «вращения колеса», поэтому я спрашиваю здесь, на SO, в надежде, что этим утром я смогу перейти к более продуктивной работе. :)
(тьфу... как насчет гиперспецифического вопроса 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());
});
Честно говоря, я думаю, что силекса для меня достаточно.
Благодарность за это решение принадлежит Nerdpress.
*ninja edit: полтора года спустя я должен сказать, что Silex был для меня бесполезным. Я использую Slim для всех нужд микрофреймворка, и это просто фантастика. Выполняет работу быстро, чисто, просто и легко.