模板

    话虽如此,但 Slim 项目提供了 Twig-View 和 组件帮助你将模版渲染为 PSR7 响应对象。

    Twig-View PHP 组件帮助你渲染应用程序中的 模版。这个组件可以在 Packageist 上找到。可以像这样使用 composer 轻易地安装:

    Figure 1: Install slim/twig-view component.

    下一步,你需要在 Slim 应用容器中将此组将注册为服务,像这样:

    1. // Create app $app = new \Slim\App();
    2. // Get container $container = $app->getContainer();
    3. // Register component on container $container['view'] = function ($container) {
    4. $view = new \Slim\Views\Twig('path/to/templates', [
    5. 'cache' => 'path/to/cache'
    6. $view->addExtension(new \Slim\Views\TwigExtension(
    7. $container['router'],
    8. $container['request']->getUri()
    9. ));
    10. };

    记住:“cache” 可以设置为 false 禁用它,‘auto_reload’ 选项也是如此,这在开发环境中很有用。了解更多信息,查阅: Twig environment options

    现在你可以使用应用程序内部的 slim/twig-view 组件服务并将其写入到 PSR 7 响应对象中,像这样:

    Figure 3: Render template with slim/twig-view container service.

    在这个例子中,在路由回调中被调用的 $this->view,是容器服务返回的 \Slim\Views\Twig 实例的一个参考(reference)。\Slim\Views\Twig 实例的 render() 方法接收一个 PSR7 响应对象作为它的第一个参数,Twig 模版路径作为它的第二个参数,模板变量的数组作为它的最后一个参数。这个 render() 方法返回一个新的 PSR7 响应对象,它的响应体是由 Twig 模版渲染的。

    slim/twig-view 组件为 Twig 模版暴露了一个自定义 path_for() 函数。你可以使用这个函数生成完整的指向应用程序中任意已命名路由的 URL。path_for() 函数接收两个参数:

    • 路由名称
    • 路由占位符和替换值的散列(hash)第二个参数的关键字须与已选择的路由的模式占位符一致。这是一个示例的 Twig 模版,它描述了上面的示例 Slim 应用程序中的 “profile” 路由的链接 URL。
    1. {% extends "layout.html" %}
    2. {% block body %}
    3. <ul>
    4. <li><a href="{{ path_for('profile', { 'name': 'josh' }) }}">Josh</a></li>
    5. </ul>
    6. {% endblock %}

    Figure 4: Install slim/php-view component.

    在 Slim App 的容器中,将此组件注册为服务,这么做:

    1. <?php
    2. // Create app $app = new \Slim\App();
    3. // Get container $container = $app->getContainer();
    4. // Register component on container $container['view'] = function ($container) {
    5. return new \Slim\Views\PhpRenderer('path/to/templates/with/trailing/slash/');
    6. };

    Figure 5: Register slim/php-view component with container.

    使用 view 组件渲染 PHP 视图:

    Figure 6: Render template with slim/twig-view container service.