如何在 slim framework v4 中添加 twig-view
how to add twig-view in slimframework v4
我正在尝试在 slim v4 中添加 twig-view
在 slim v3 中,我们在容器中添加了 twig-view
$container['view'] = function ($c) {
$view = new \Slim\Views\Twig('path/to/templates', [
'cache' => 'path/to/cache'
]);
// Instantiate and add Slim specific extension
$router = $c->get('router');
$uri = \Slim\Http\Uri::createFromEnvironment(new \Slim\Http\Environment($_SERVER));
$view->addExtension(new \Slim\Views\TwigExtension($router, $uri));
return $view;
};
但我不能像在 slim v4 中那样添加树枝
更新:Twig-View 已达到稳定版本,文档已更新以解决 Slim 4 集成问题。
如果您还在使用不稳定版本的Twig-View,请考虑升级。
首先,您需要将 Twig-View 包添加到您的项目中:
composer require slim/twig-view
假设目录结构如下:
composer.json
cache/
public/
|--index.php
templates/
|--hello.twig
vendor/
|--autoload.php
以下是两个工作示例:
如果您使用容器(根据Slim 4 docs,这是可选的),您可以将Tiwg 创建定义添加到容器中,并在需要时使用它。 (我在此示例中使用 php-di/php-di
,但您可以使用任何 PSR 兼容的依赖项容器。)
index.php, 使用容器:
<?php
use DI\Container;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require __DIR__ . '/../vendor/autoload.php';
// Create Container
$container = new Container();
AppFactory::setContainer($container);
// Set view in Container
$container->set('view', function() {
return Twig::create(__DIR__ . '/../templates',
['cache' => __DIR__ . '/../cache']);
});
// Create App
$app = AppFactory::create();
// Add Twig-View Middleware
$app->add(TwigMiddleware::createFromContainer($app));
// Example route
$app->get('/hello/{name}', function ($request, $response, $args) {
return $this->get('view')->render($response, 'hello.twig', [
'name' => $args['name']
]);
});
// Run the app
$app->run();
您也可以跳过容器创建,但在这种情况下,您需要在尝试呈现模板之前创建 Twig 实例。
index.php,没有容器:
<?php
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require __DIR__ . '/../vendor/autoload.php';
// Create App
$app = AppFactory::create();
// Create Twig
$twig = Twig::create(__DIR__ . '/../templates',
['cache' => __DIR__ . '/../cache']);
// Add Twig-View Middleware
$app->add(TwigMiddleware::create($app, $twig));
// Example route
// Please note how $view is created from the request
$app->get('/hello/{name}', function ($request, $response, $args) {
$view = Twig::fromRequest($request);
return $view->render($response, 'hello.twig', [
'name' => $args['name']
]);
});
// Run the app
$app->run();
hello.twig:
Hello {{ name }}
现在尝试在浏览器中访问 /hello/slim4
,输出将是:
Hello slim4
SlimTwigView 处于 3.0.0 测试版(至少截至 2019 年 10 月 12 日),有些内容已经更改。我看到的几个在线教程,以及官方文档都已经失效了。
TwigMiddleware 不再将 $container 的实例作为参数,因此您必须首先手动将 Twig 放在 Container 上,例如:
$container->set('view', function() {
// Of course put correct path to your views here
return new Twig('../views', ['cache' => false]);
});
然后您可以使用 class' 新的 createFromContainer 方法将 TwigMiddleware 添加到您的 Slim 应用程序,如下所示:
$app->add(TwigMiddleware::createFromContainer($app));
// which is equivalent to:
// $app->add(TwigMiddleware::createFromContainer($app, 'view'));
此时,您可以像这样渲染 Twig 视图:
$app->get('/', function (Request $request, Response $response, $args) {
return $this->get('view')->render($response, 'home.twig');
});
使用 Slim 特定中间件时,您现在可以访问额外的 Twig 扩展:
url_for
full_url_for
is_current_url
current_url
get_uri
嗯!就我而言,我使用的是 Slim 4.0 和 Twig ^2.5。我添加到代码中的所有内容是
$container->set('view', function () use ($container) {
$view = new \Slim\Views\Twig(
__DIR__ .'/Templates'
, [ 'cache' => false ] //you can turn on caching by providing string path to cache or set to false
);
return $view;
});
我正在尝试在 slim v4 中添加 twig-view
在 slim v3 中,我们在容器中添加了 twig-view
$container['view'] = function ($c) {
$view = new \Slim\Views\Twig('path/to/templates', [
'cache' => 'path/to/cache'
]);
// Instantiate and add Slim specific extension
$router = $c->get('router');
$uri = \Slim\Http\Uri::createFromEnvironment(new \Slim\Http\Environment($_SERVER));
$view->addExtension(new \Slim\Views\TwigExtension($router, $uri));
return $view;
};
但我不能像在 slim v4 中那样添加树枝
更新:Twig-View 已达到稳定版本,文档已更新以解决 Slim 4 集成问题。
如果您还在使用不稳定版本的Twig-View,请考虑升级。
首先,您需要将 Twig-View 包添加到您的项目中:
composer require slim/twig-view
假设目录结构如下:
composer.json
cache/
public/
|--index.php
templates/
|--hello.twig
vendor/
|--autoload.php
以下是两个工作示例:
如果您使用容器(根据Slim 4 docs,这是可选的),您可以将Tiwg 创建定义添加到容器中,并在需要时使用它。 (我在此示例中使用 php-di/php-di
,但您可以使用任何 PSR 兼容的依赖项容器。)
index.php, 使用容器:
<?php
use DI\Container;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require __DIR__ . '/../vendor/autoload.php';
// Create Container
$container = new Container();
AppFactory::setContainer($container);
// Set view in Container
$container->set('view', function() {
return Twig::create(__DIR__ . '/../templates',
['cache' => __DIR__ . '/../cache']);
});
// Create App
$app = AppFactory::create();
// Add Twig-View Middleware
$app->add(TwigMiddleware::createFromContainer($app));
// Example route
$app->get('/hello/{name}', function ($request, $response, $args) {
return $this->get('view')->render($response, 'hello.twig', [
'name' => $args['name']
]);
});
// Run the app
$app->run();
您也可以跳过容器创建,但在这种情况下,您需要在尝试呈现模板之前创建 Twig 实例。
index.php,没有容器:
<?php
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require __DIR__ . '/../vendor/autoload.php';
// Create App
$app = AppFactory::create();
// Create Twig
$twig = Twig::create(__DIR__ . '/../templates',
['cache' => __DIR__ . '/../cache']);
// Add Twig-View Middleware
$app->add(TwigMiddleware::create($app, $twig));
// Example route
// Please note how $view is created from the request
$app->get('/hello/{name}', function ($request, $response, $args) {
$view = Twig::fromRequest($request);
return $view->render($response, 'hello.twig', [
'name' => $args['name']
]);
});
// Run the app
$app->run();
hello.twig:
Hello {{ name }}
现在尝试在浏览器中访问 /hello/slim4
,输出将是:
Hello slim4
SlimTwigView 处于 3.0.0 测试版(至少截至 2019 年 10 月 12 日),有些内容已经更改。我看到的几个在线教程,以及官方文档都已经失效了。
TwigMiddleware 不再将 $container 的实例作为参数,因此您必须首先手动将 Twig 放在 Container 上,例如:
$container->set('view', function() {
// Of course put correct path to your views here
return new Twig('../views', ['cache' => false]);
});
然后您可以使用 class' 新的 createFromContainer 方法将 TwigMiddleware 添加到您的 Slim 应用程序,如下所示:
$app->add(TwigMiddleware::createFromContainer($app));
// which is equivalent to:
// $app->add(TwigMiddleware::createFromContainer($app, 'view'));
此时,您可以像这样渲染 Twig 视图:
$app->get('/', function (Request $request, Response $response, $args) {
return $this->get('view')->render($response, 'home.twig');
});
使用 Slim 特定中间件时,您现在可以访问额外的 Twig 扩展:
url_for full_url_for is_current_url current_url get_uri
嗯!就我而言,我使用的是 Slim 4.0 和 Twig ^2.5。我添加到代码中的所有内容是
$container->set('view', function () use ($container) {
$view = new \Slim\Views\Twig(
__DIR__ .'/Templates'
, [ 'cache' => false ] //you can turn on caching by providing string path to cache or set to false
);
return $view;
});