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