我的问题:如何允许debug
在 Silex 中使用 Twig 模板?
我正在玩 Silex 微框架(一个利用 Symfony 的 PHP 框架)。
当使用 Twig 模板系统时,我想输出一个特定的对象。通常我会var_dump($app);
在 Twig 中使用{% debug app %}
.
我的问题是调试(并将 Silex 自己的调试设置为true
对 Twig 没有帮助)与 Silex 一起工作。开箱即用的调用debug
将导致错误消息:
Twig_Error_Syntax: Unknown tag name "debug" in...
调试调用如下所示:
{% debug app %}
我找到了有关如何配置 Twig 的 config.yml 文件以正确使用的参考资料,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 编辑:一年半后,我不得不说 Silex 对我来说是个哑弹。我一直在使用Slim来满足所有微框架的需求,这太棒了。快速、干净、简单、轻松地完成工作。