Twig 示例页面h1>水果列表:h2>

以下是一个完整的Twig 模板引擎使用示例,包含 PHP 配置、模板继承、变量传递、循环、条件判断等常见功能。

1. 项目结构

twig-demo/

├── templates/ # 模板目录

│ ├── base.html.twig # 基础模板

│ └── home.html.twig # 页面模板

├── vendor/ # Composer 依赖

└── index.php # PHP 入口文件

2. 安装 Twig

通过 Composer 安装:

bash

composer require "twig/twig:^3.0"

3. PHP 代码 ()

index.php

php

require_once 'vendor/autoload.php';

// 1. 配置 Twig

$loader = new \Twig\Loader\FilesystemLoader('templates');

$twig = new \Twig\Environment($loader, [

'cache' => false, // 开发时禁用缓存

'debug' => true, // 启用调试模式

// 2. 添加调试扩展(可选)

$twig->addExtension(new \Twig\Extension\DebugExtension());

// 3. 准备数据

$data = [

'page_title' => 'Twig 示例页面',

'items' => ['苹果', '香蕉', '橙子'],

'show_footer' => true,

'current_time' => new DateTime(),

// 4. 渲染模板

echo $twig->render('home.html.twig', $data);

4. 基础模板 ()

templates/base.html.twig

twig

{{ page_title }}

{% block content %}{% endblock %}

{% if show_footer %}

© {{ "now"|date("Y") }} My Website

{% endif %}

5. 页面模板 ()

templates/home.html.twig

twig

{% extends "base.html.twig" %}

{% block content %}

你好,{{ username }}!

水果列表:

{% for item in items %}

{# 使用过滤器转为大写 #}

{{ loop.index }}. {{ item|upper }}

{% else %}

{# 当 items 为空时显示 #}

暂无数据

{% endfor %}

{# 条件判断 #}

{% if items|length > 2 %}

你有超过 2 种水果!

{% endif %}

{# 使用 PHP 对象 #}

当前时间:{{ current_time|date("Y-m-d H:i:s") }}

{% endblock %}

6. 运行结果

访问后,输出的 HTML 如下:

index.php

html

html>

Twig 示例页面title>

head>

header>

你好,张三!p>

  • 1. 苹果li>
  • 2. 香蕉li>
  • 3. 橙子li>
  • ul>
  • 你有超过 2 种水果!p>
  • 当前时间:2023-10-25 14:30:00p>
  • main>
  • © 2023 My Websitep>
  • footer>
  • body>
  • html>
  • 7. 关键功能说明
  • (1) 变量传递
  • PHP 传递数据给模板:
  • php
  • $data = ['username' => '张三'];
  • echo $twig->render('home.html.twig', $data);
  • 模板中使用变量:
  • twig
  • 你好,{{ username }}!
  • (2) 模板继承
    • 继承基础模板。
    • {% extends "base.html.twig" %}
    • 定义可覆盖的块。
    • {% block content %}{% endblock %}
  • (3) 循环与条件
  • twig
  • {% for item in items %}
{{ item }}
  • {% else %}
  • {# 当 items 为空时显示 #}
暂无数据
  • {% endfor %}
  • {% if show_footer %}
  • {% endif %}
  • (4) 过滤器
    • 转为大写。
    • |upper
    • 格式化日期。
    • |date("Y-m-d")
    • 获取数组长度。
    • |length
  • (5) 特殊变量
    • :当前循环索引(从 1 开始)。
    • loop.index
    • :当前年份。
    • "now"|date("Y")
  • 8. 高级用法
  • (1) 自定义过滤器
  • 在中添加:
  • index.php
  • php
  • $twig->addFilter(new \Twig\TwigFilter('reverse', 'strrev'));
  • 模板中使用:
  • twig
  • {# 输出 "olleH" #}
  • {{ "Hello"|reverse }}
  • (2) 包含子模板
  • 创建:
  • templates/_alert.html.twig
  • twig
  • {{ message }}
  • 在主模板中引入:
  • twig
  • {% include '_alert.html.twig' with {'message': '警告!'} %}
  • (3) 宏(Macros)
  • 定义可复用的代码块:
  • twig
  • {# templates/_macros.html.twig #}
  • {% macro button(text, type = 'primary') %}
  • {{ text }}
  • {% endmacro %}
  • 使用宏
  • twig
  • {% from '_macros.html.twig' import button %}
  • {{ button('提交', 'success') }}
  • 9. 总结
    • Twig是一个灵活、安全的 PHP 模板引擎。
    • 支持继承包含过滤器等功能。
    • 自动转义变量,防止 XSS 攻击。
    • 适合构建动态前端页面,逻辑与展示分离。
  • 你可以根据需求扩展更多功能,如国际化、缓存优化等!