slim / twig-view-TwigExtension模板功能不完整,无法正常工作

问题描述

我正在按照此处介绍的步骤在Slim https://github.com/slimphp/Twig-View/tree/3.1.0#usage中使用twig-view,但是当我尝试使用TwigExtension中使用的任何模板功能时,在屏幕上都会出现以下错误

Fatal error: Uncaught Twig\Error\SyntaxError: UnkNown "url_for" function.

我已经成功运行$ composer require slim/twig-view:^3.0,我的composer.json文件如下所示

"require": {
        "slim/slim": "4.*","slim/psr7": "^1.2","league/container": "^3.3","slim/twig-view": "^3.0"
    },

这是我的代码

require_once __DIR__ . '/../vendor/autoload.PHP';

$container = new \Slim\Factory\Container();
\Slim\Factory\AppFactory::setContainer($container);

$container->add('view',function () {
    return \Slim\Views\Twig::create(__DIR__ . '/views',[
        'cache' => false,]);
});

$app = \Slim\Factory\AppFactory::create();
$app->add(\Slim\Views\TwigMiddleware::createFromContainer($app));

require_once __DIR__ . '/../routes.PHP';


// routes.PHP
$app->get('/',function ($request,$response,$args) use ($container) {
    return $container->get('view')->render($response,'home.twig',['foo' => 'test']);
})->setName('home');

// home.twig
...
<body>
    Home {{ foo }}
    <br>
    <a href="{{ url_for('about') }}">About</a>
</body>
...

如果我从树枝模板中删除url_for,则页面在浏览器上的加载效果很好。我试图在我的代码库和供应商文件夹中搜索TwigExtension,但找不到类似的文件。 我在这里做错什么了吗?

解决方法

好像是因为联赛集装箱。每次调用该函数$container->get('view')时,似乎都在创建Twig的新实例,而不是每次都引用相同的实例。因此,解决方法是

$twig = \Slim\Views\Twig::create(__DIR__ . '/views',[
    'cache' => false,]);

$container->add('view',function () use (&$twig) {
    return $twig;
});

// Or this instead
$container->add(
    'view',\Slim\Views\Twig::create(__DIR__ . '/views',[
        'cache' => false,])
);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...