Slim 没有像传统 MVC 框架那样的视图层。相反,Slim 的“视图”是 HTTP 响应。每个 Slim 应用程序路由负责准备和返回适当的 PSR-7 响应对象。
Slim 的“视图”是 HTTP 响应。
也就是说,Slim 项目提供了Twig-View和 PHP-View组件来帮助您将模板渲染到 PSR7 Response 对象。
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';
// Create App
$app = AppFactory::create();
// Create Twig
$twig = Twig::create('path/to/templates', ['cache' => false]);
// Add Twig-View Middleware
$app->add(TwigMiddleware::create($app, $twig));
注意:对于生产场景,cache
应设置为 some'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');
// Run app
$app->run();
在此示例中,在路由回调内部调用的是对该方法返回的实例的$view
引用。该实例的方法接受一个 PSR-7 Response 对象作为它的第一个参数,Twig 模板路径作为它的第二个参数,一个模板变量数组作为它的最后一个参数。该方法返回一个新的 PSR-7 Response 对象,其主体是呈现的 Twig 模板。\Slim\Views\Twig
fromRequest
\Slim\Views\Twig
render()
render()
该组件向您的 Twig 模板slim/twig-view
公开一个自定义函数。url_for()
您可以使用此函数为您的 Slim 应用程序中的任何命名路由生成完整的 URL。该url_for()
函数接受两个参数:
第二个参数的键应该对应于所选路由的模式占位符。这是一个示例 Twig 模板,它为上面示例 Slim 应用程序中显示的“配置文件”命名路由绘制链接 URL。
{% extends "layout.html" %}
{% block body %}
<h1>User List</h1>
<ul>
<li><a href="{{ url_for('profile', { 'name': 'josh' }) }}">Josh</a></li>
</ul>
{% endblock %}
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';
// Create 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 响应对象的主体。