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 攻击。
- 适合构建动态前端页面,逻辑与展示分离。
- 你可以根据需求扩展更多功能,如国际化、缓存优化等!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.