模板

Slim 没有像传统 MVC 框架那样的视图层。相反,Slim 的“视图”是 HTTP 响应每个 Slim 应用程序路由负责准备和返回适当的 PSR-7 响应对象。

Slim 的“视图”是 HTTP 响应。

也就是说,Slim 项目提供了Twig-ViewPHP-View组件来帮助您将模板渲染到 PSR7 Response 对象。

slim/twig-view 组件

Twig -View PHP 组件可帮助您 在应用程序中呈现Twig模板。这个组件在 Packagist 上可用,并且可以像这样使用 Composer 轻松安装:

composer require slim/twig-view
图 1:安装 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));
图 2:添加 slim/twig-view 中间件。

注意:对于生产场景,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();
图 3:使用 slim/twig-view 容器服务渲染模板。

在此示例中,在路由回调内部调用的是对该方法返回的实例的$view引用实例的方法接受一个 PSR-7 Response 对象作为它的第一个参数,Twig 模板路径作为它的第二个参数,一个模板变量数组作为它的最后一个参数。方法返回一个新的 PSR-7 Response 对象,其主体是呈现的 Twig 模板。\Slim\Views\TwigfromRequest\Slim\Views\Twigrender()render()

url_for() 方法

该组件向您的 Twig 模板slim/twig-view公开一个自定义函数。url_for()您可以使用此函数为您的 Slim 应用程序中的任何命名路由生成完整的 URL。url_for() 函数接受两个参数:

  1. 路线名称
  2. 路由占位符名称和替换值的散列

第二个参数的键应该对应于所选路由的模式占位符。这是一个示例 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 %}

slim/php-view 组件

PHP -View PHP 组件可帮助您呈现 PHP 模板。该组件在 Packagist 上可用,可以像这样使用 Composer 安装:

composer require slim/php-view
图 6:安装 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();
图 8:使用 slim/php-view 服务渲染模板。

其他模板系统

您不限于Twig-ViewPHP-View组件。您可以使用任何 PHP 模板系统,前提是您最终将呈现的模板输出写入 PSR-7 响应对象的主体。