模板
Slim 框架没有像传统的 MVC 框架那样具有视图层。相反,Slim 的 视图 是 HTTP 响应。每个 Slim 应用程序路由负责准备和返回适当的 PSR-7 响应对象。
Slim的 视图 就是 HTTP 响应。
话虽如此,Slim 项目提供了 Twig-View 和 PHP-View 组件来帮助你将模板呈现到 PSR-7 响应对象中。
slim/twig-view 组件
Twig-View PHP 组件可以帮助你在应用程序中呈现 Twig 模板。该组件可以在 Packagist 上找到,并且可以使用 Composer 轻松安装,像这样:
composer require slim/twig-view
接下来,你需要将 slim/twig-view 中间件添加到 Slim 应用程序中:
<?php
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require __DIR__ . '/vendor/autoload.php';
// 创建App
$app = AppFactory::create();
// 创建Twig
$twig = Twig::create('path/to/templates', ['cache' => false]);
// 添加Twig-View中间件
$app->add(TwigMiddleware::create($app, $twig));
注意:对于生产环境,cache 应该设置为某个路径(例如 'path/to/cache'),以存储编译后的模板(避免在每次请求时重新编译)。有关更多信息,请参阅 Twig环境选项。
现在你可以在应用程序路由中使用 slim/twig-view 组件服务,将模板呈现并将其写入 PSR-7 响应对象,像这样:
$app->get('/hello/{name}', function ($request, $response, $args) {
$view = Twig::fromRequest($request);
return $view->render($response, 'profile.html', [
'name' => $args['name']
]);
})->setName('profile');
// 运行应用程序
$app->run();
在此示例中,路由回调函数中调用的 $view 是通过 fromRequest 方法返回的 \Slim\Views\Twig 实例的引用。\Slim\Views\Twig 实例的 render() 方法接受一个 PSR-7 响应对象作为第一个参数,Twig 模板路径作为第二个参数,以及一个模板变量数组作为最后一个参数。render() 方法返回一个新的 PSR-7 响应对象,其正文是渲染后的 Twig 模板。
url_for() 方法
slim/twig-view 组件为 Twig 模板公开了自定义的 url_for() 函数。你可以使用此函数生成指向 Slim 应用程序中任何已命名路由的完整 URL。url_for() 函数接受两个参数:
- 路由名称
- 路由占位符名称和替换值的哈希表
第二个参数的键应该对应于所选路由的模式占位符。下面是一个示例 Twig 模板,它为上述示例 Slim 应用程序中显示的"profile"命名路由绘制了一个链接 URL。
{% raw %}
{% extends "layout.html" %}
{% block body %}
<h1>User List</h1>
<ul>
<li><a href="{{ url_for('profile', { 'name': 'josh' }) }}">Josh</a></li>
</ul>
{% endblock %}
{% endraw %}
slim/php-view 组件
PHP-View PHP 组件可以帮助你呈现 PHP 模板。该组件可以在 Packagist 上找到,并且可以使用 Composer 安装,像这样:
composer require slim/php-view
你可以像这样在 Slim 中使用它:
<?php
use Slim\Factory\AppFactory;
use Slim\Views\PhpRenderer;
require __DIR__ . '/vendor/autoload.php';
// 创建App
$app = AppFactory::create();
$app->get('/hello/{name}', function ($request, $response, $args) {
$renderer = new PhpRenderer('path/to/templates');
return $renderer->render($response, "hello.php", $args);
})->setName('profile');
$app->run();
其他模板系统
你不仅限于使用 Twig-View 和 PHP-View 组件。你可以使用任何 PHP 模板系统,只要最终将渲染后的模板输出写入 PSR-7 响应对象的正文即可。