php - Silex 微框架和 Twig : enable debug

标签 php twig silex

我的问题:如何允许在 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),
));

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

我感觉自己进入了“轮子旋转”模式,所以我在 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满足所有微框架需求,这太棒了。快速、干净、简单、轻松地完成工作。

最佳答案

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

Composer .json:

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

应用程序.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/

相关文章:

php - Pimple DI 共享已弃用。怎么办?

php - 正则表达式打破中文字符串

php - 使用外键laravel从另一个表中获取数据

php - 如何在不为 Java Bridge 添加 tomcat 服务器的情况下将 Java 后端添加到现有 PHP 站点?

PHP 查询失败,显示错误?

forms - Symfony2 表格 : repated type and his rendering in twig

forms - Symfony 不验证对象约束

symfony - 如何检查 Twig 模板中是否存在 block - Symfony2

javascript - 如何通过从 json 文件获取数据来创建可编辑表?

silex - 设置 Silex 项目 - 在哪里?