猿问

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,但找不到任何类似的文件。我在这里做错了什么吗?


喵喔喔
浏览 127回答 1
1回答

慕侠2389804

看起来这是因为联盟容器。似乎每次调用函数时都会创建一个新的 Twig 实例,$container->get('view')每次都会返回一个新实例,而不是引用同一个实例。所以解决方法是$twig = \Slim\Views\Twig::create(__DIR__ . '/views', [&nbsp; &nbsp; 'cache' => false,]);$container->add('view', function () use (&$twig) {&nbsp; &nbsp; return $twig;});// Or this instead$container->add(&nbsp; &nbsp; 'view',&nbsp;&nbsp; &nbsp; \Slim\Views\Twig::create(__DIR__ . '/views', [&nbsp; &nbsp; &nbsp; &nbsp; 'cache' => false,&nbsp; &nbsp; ]));
随时随地看视频慕课网APP
我要回答