Микро-фреймворк Silex и Twig: включить отладку

Мой вопрос: Как разрешить использование 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 для всех нужд микро-фреймворков, и это фантастика. Выполняет работу быстро, чисто, просто и легко.

9
задан rg88 13 December 2013 в 21:47
поделиться