我的问题:如何在Silex的Twig模板中使用debug

我正在玩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),
));

不起作用。这是错误的选择吗?格式不正确吗?我不知道,我也没有尝试过。

我感觉自己进入了“车轮旋转”模式,因此我在此询问,希望我能在今天早上继续从事更有生产力的工作。 :)

(嗯...一个超特定的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来满足所有微框架的需求,这真是太棒了。快速,干净,简单,轻松地完成工作。

最佳答案

我完全删除了旧答案,以显示我构建的一个小示例应用程序的输出:

composer.json:

{
  "require": {
    "silex/silex": "1.*",
    "twig/twig": "1.*",
    "twig/extensions": "*"
  }
}

app.php:

require_once __DIR__ . '/../vendor/.composer/autoload.php';

$app = new Silex\Application();

$app['debug'] = true;

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => __DIR__ . '/views',
    'twig.options' => array('debug' => true)
));
$app['twig']->addExtension(new Twig_Extensions_Extension_Debug());

$app->get('/', function () use ($app) {
    return $app['twig']->render('debug_test.twig', array('app' => $app));
});
$app->run();

关于php - Silex微框架和Twig : enable debug,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9196308/

10-10 23:05