Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Silex微框架和细枝:启用调试_Php_Twig_Silex - Fatal编程技术网

Php Silex微框架和细枝:启用调试

Php Silex微框架和细枝:启用调试,php,twig,silex,Php,Twig,Silex,我的问题:如何允许在Silex内的小树枝模板中使用debug 我正在使用Silex micro framework(一个利用Symfony的PHP框架) 当使用Twig模板系统时,我想输出一个特定的对象。通常我会使用var\u dump($app)来实现这一点并在带有{%debug app%}的小树枝中 我的问题是让debug(并且将Silex自己的debug设置为true对Twig没有帮助)与Silex一起工作。开箱即用调用debug将导致错误消息: Twig_Error_Syntax: U

我的问题:如何允许在Silex内的小树枝模板中使用
debug


我正在使用Silex micro framework(一个利用Symfony的PHP框架)

当使用Twig模板系统时,我想输出一个特定的对象。通常我会使用
var\u dump($app)来实现这一点并在带有
{%debug app%}
的小树枝中

我的问题是让debug(并且将Silex自己的debug设置为
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),
));
不起作用。这是一种错误的选择吗?只是格式不正确?我不知道,我试过的都不管用

我感觉自己进入了“车轮旋转”模式,所以我在这里继续提问,希望我今天早上能继续从事更有成效的工作。:)

(呃……对于一个超特定的堆栈溢出问题,这是怎么回事?)


解决方案:(所有这些只是为了获得类似于
var\u dump
的功能……哦,天哪):老实说,这有点让人头疼,Silex文档在发现这一点方面帮不了什么忙,但我必须做些什么才能让它正常工作

首先加载细枝自动加载器:

$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
));
老实说,我觉得这对我来说已经足够了

这一解决方案的功劳在于



*忍者编辑:一年半之后,我不得不说Silex对我来说是个哑弹。我一直在使用所有的微框架需要,它是梦幻般的。快速、干净、简单、轻松地完成工作。

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

composer.json:

{
  "require": {
    "silex/silex": "1.*",
    "twig/twig": "1.*",
    "twig/extensions": "*"
  }
}
"silex/silex": "~1.3",
"twig/twig": "^1.23",
"symfony/twig-bridge": "^2.7",
"twig/extensions": "^1.3"
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();

现在已经有一段时间了,所以我对接受的答案做了一个小的更新,你可以使用新的青春痘扩展方法:

composer.json:

{
  "require": {
    "silex/silex": "1.*",
    "twig/twig": "1.*",
    "twig/extensions": "*"
  }
}
"silex/silex": "~1.3",
"twig/twig": "^1.23",
"symfony/twig-bridge": "^2.7",
"twig/extensions": "^1.3"
index.php(前端控制器)


对于使用pimple 3的silex ^2.2,共享()已删除,因此请使用:

$app->extend('twig', function($twig, $app) {
    $twig->addExtension(new Twig_Extension_Debug());
    return $twig;
});

$app['debug']=true已经设置好了,而您为Twig设置debug的示例与我的示例基本相同,但不起作用。我编辑了我的示例以显示更完整的代码,但基本上与您的代码相同。您是对的,我以前从未在Twig中使用过调试,因此我没有注意到。快速运行返回消息:中的未知标记名“debug”。。。这让我意识到它可能是由一个扩展提供的,瞧,谷歌上的快速搜索返回了上述结果;)很好的发现,你的“谷歌富”比我的好。我不得不将
Twig\u Extension\u Debug()
更改为
Twig\u Extension\u Debug()
,或者它找不到它,但最终还是以同样的方式失败;当您使用composer时,您可以通过在“require”中添加“twig/extensions”来完成此操作,否则请添加,并且不要忘记添加自动加载器的路径谢谢。我找到了一个完整的解决方案,但你的建议帮我指明了方向。