Skip to content
CannonPHP

视图

视图

简介

在构建 Web 应用程序时,直接从控制器返回完整的 HTML 文档字符串是不实际的。视图提供了一种方便的方法,通过将 HTML 代码放置在单独的文件中,将控制器/应用程序逻辑与呈现逻辑分离。

在 CannonPHP 中,默认使用 Twig 3.0 模板引擎来处理视图。视图模板通常使用 Twig 模板语言编写。让我们看一个简单的视图示例:

<!-- App/View/default/base.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <nav>
        <a href="/">Home</a> |
        <a href="/apples/index">Posts</a>
    </nav>

    {% block body %}
    {% endblock %}
</body>
</html>

<!-- App/View/default/Home/index.html -->
{% extends "base.html" %}

{% block title %}abc{% endblock %}

{% block body %}
    <h1>{{ name }}</h1>
{% endblock %}

要渲染视图,可以使用 View 类提供的静态 renderTemplate 函数,像这样:

<?php

namespace App\Controller;

use Core\BaseController;
use Core\View;

class Home extends BaseController
{
    public function indexAction()
    {
        $name = 123;

        return View::renderTemplate('Home/index.html', ['name' => $name]);
    }
}

优化视图

默认情况下,Twig 会自动缓存编译后的模板以提高性能。这种缓存机制避免了在后续请求中对模板进行解析的需要。

在渲染模板时,Twig 会检查是否存在模板的缓存版本。如果存在,Twig 将使用缓存版本而不是重新渲染模板。如果缓存版本不存在或已过期,Twig 将重新编译并缓存模板,然后再进行渲染。

默认情况下,缓存的模板存储在根目录下的 Cache 目录中。