Skip to content

模板

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() 函数接受两个参数:

  1. 路由名称
  2. 路由占位符名称和替换值的哈希表

第二个参数的键应该对应于所选路由的模式占位符。下面是一个示例 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-ViewPHP-View 组件。你可以使用任何 PHP 模板系统,只要最终将渲染后的模板输出写入 PSR-7 响应对象的正文即可。