- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的问题:如何允许在 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/
我正在编写一个 Web 应用程序,它有一个前置网站,然后是一个管理控制台。我希望能够有一个设置,当设置为 true 时,意味着在前端网站上显示一个保留或维护页面。 我的路由配置目前在一个 yaml 文
我正在我的 app.php 文件中做这样的共享服务: $app['rules'] = $app->share(function() use($app) { return new MyProje
这是一个关于第一次使用 Silex 的非常基本的问题。 我要安装this project链接自 this tutorial .我已经按照 these instructions 通过 Composer
我正在使用 Silex 1.1 和 Monolog 1.0.0。我的代码和我的问题: $app->register(new Silex\Provider\MonologServiceProvider(
我环顾四周,似乎无法弄清楚如何在使用 Silex 时链接到静态文件。我已经看到一些关于 Symfony 的类似问题/答案,但它们涉及 YML 路由文件,我不将其与 Silex 一起使用。 我的情况 我
我环顾四周,似乎无法弄清楚如何在使用 Silex 时链接到静态文件。我已经看到一些关于 Symfony 的类似问题/答案,但它们涉及 YML 路由文件,我不将其与 Silex 一起使用。 我的情况 我
我在 Silex 中定义了几个路由,但我不知道如何捕获不存在的路由。 例如: $app->get('/category/{name}', 'Acme\Controller\Main::category
我想将 Silex 与 MongoDB 一起使用。我想最好的方法是使用再次使用 Doctrine MongoDB 库的 Silex 扩展。 现在有两个 Silex Extensions 似乎提供了这个
我安装了 phpunit 3.6.12 和 Silex。在我的应用程序的根目录中,我有包含简单测试文件 BlogFunctionTest.php 的测试目录 assertGreaterThan(0,
我最近将一切正常的 Silex v1.3 项目迁移到了 Silex v2。我收到一个 Twig 错误,我不明白原因 Twig_Error_Runtime in Template.php line 59
我正在开发一个带有 silex-skeleton 的最新版本的项目。尝试使用 share 方法时显示以下错误: 代码: $app['login'] = $app->share(function() u
我有一个大问题,我不知道为什么 silex 异常处理程序不捕获异常? 我的简单代码如下所示: error(function (\Exception $e, $code) { exit('asd');
在 Symfony 中,可以通过在 security.yml 文件中添加 invalidate_session: false 来避免 session 在注销时被破坏。 遗憾的是,这在 Silex 中不
我尝试使用 silex 文档为 LDAP 身份验证编写自定义身份验证提供程序 - Defining a custom Authentication Provider . 但如果我查看 $app['se
我想要一条匹配“任何东西”的路线。如果数据库中存在具有给定路径的页面,我想从“任何”值中查找。如果是,则需要处理此路由,否则应处理下一个匹配的路由。 有没有简单的方法可以解决这个问题,还是我错过了路线
我试图在 Controller 上设置错误处理程序,以捕获可能导致页面故障的所有内容。例如:在这种情况下,我试图捕获我的方法使用错误的参数调用外部API后可能发生的任何错误,但是除了给我提供典型的Cl
Silex 中是否可以根据抛出的异常使用错误处理程序? 我知道这可以通过单个异常处理程序和抛出异常的类名上的 switch 语句来实现,但对我来说,“Silex 方式”似乎更干净,但不起作用。 这就是
我的目标是将FOQElasticBundle与我的Silex网站链接。 问题是FOQElasticBundle的documentationn声明我只需要在config.yml文件中放入一些基本内容即可
有没有我可以通过 $app 变量 (Silex\Application) 调用的函数来访问 Web 根目录和应用程序根目录? 假设我的项目布局是这样的 /src run() 在 src/cont
我的路由有三个参数,userid 总是必需的,a 和 b 是可选参数。可以给出 a or (a and b) or (neither a nor b): $app->get('/show/{useri
我是一名优秀的程序员,十分优秀!