slim/twig-view - TwigExtension 模板函数未确定且有效
slim/twig-view - TwigExtension template functions not indetified and working
我正在按照此处描述的步骤在 Slim 中使用 twig-view https://github.com/slimphp/Twig-View/tree/3.1.0#usage,但是当我尝试使用 TwigExtension[= 中使用的任何模板函数时,我的屏幕上出现以下错误17=]
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>
...
如果我从 twig 模板中删除 url_for
,该页面将在浏览器中正常加载。我试图在我的代码库和供应商文件夹中搜索 TwigExtension,但找不到任何类似的文件。
我是不是做错了什么?
看起来是因为联盟容器。每次调用函数时,它似乎都在创建一个新的 Twig 实例 $container->get('view')
returns 每次都是一个新实例,而不是引用同一个实例。所以解决方法是
$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,
])
);
我正在按照此处描述的步骤在 Slim 中使用 twig-view https://github.com/slimphp/Twig-View/tree/3.1.0#usage,但是当我尝试使用 TwigExtension[= 中使用的任何模板函数时,我的屏幕上出现以下错误17=]
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>
...
如果我从 twig 模板中删除 url_for
,该页面将在浏览器中正常加载。我试图在我的代码库和供应商文件夹中搜索 TwigExtension,但找不到任何类似的文件。
我是不是做错了什么?
看起来是因为联盟容器。每次调用函数时,它似乎都在创建一个新的 Twig 实例 $container->get('view')
returns 每次都是一个新实例,而不是引用同一个实例。所以解决方法是
$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,
])
);