Twig 是一个现代 PHP 模板引擎
- 快速: Twig 将模板编译成纯粹优化的 PHP 代码。与常规 PHP 代码相比,开销已降至最低。
- 安全: Twig 具有沙箱模式,用于评估不受信任的模板代码。这使得 Twig 可以用作应用程序的模板语言,在这些应用程序中,用户可以修改模板设计。
- 灵活: Twig 由灵活的 lexer 和 parser 驱动。这允许开发人员定义自己的自定义标签和过滤器,并创建自己的 DSL。
是什么让 Twig 比 PHP 更适合作为模板引擎?
当谈到 PHP 中的模板引擎时,许多人会告诉你 PHP 本身就是一个模板引擎。但即使 PHP 最初是作为一种模板语言而生的,但在最近几年它并没有像模板语言那样发展。事实上,它不支持现代模板引擎现在应该具备的许多功能
简洁: PHP 语言很冗长,当涉及到输出转义时,会变得非常冗长
1 2
<?php echo $var ?> <?php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?>
相比之下,Twig 具有非常简洁的语法,这使得模板更具可读性
1 2 3
{{ var }} {{ var|escape }} {{ var|e }} {# shortcut to escape a variable #}
面向模板的语法 Twig 对常见模式有快捷方式,例如在迭代空数组时显示默认文本
1 2 3 4 5
{% for user in users %} * {{ user.name }} {% else %} No users have been found. {% endfor %}
功能齐全: Twig 支持构建强大模板所需的一切:多重继承、块、自动输出转义等等
1 2 3 4 5
{% extends "layout.html" %} {% block content %} Content of the page... {% endblock %}
- 易于学习: 该语法易于学习,并且经过优化,使网页设计师能够快速完成工作而不会受到阻碍。
当然,PHP 也是您可以找到更多模板引擎项目的语言。但它们中的大多数尚未拥抱 Web 开发的最佳实践
- 可扩展性: Twig 足以灵活地满足您的所有需求,即使是最复杂的需求。 благодаря открытой архитектуре вы можете реализовать свои собственные языковые конструкции (теги, фильтры, функции и даже операторы) для создания собственного DSL。
- 单元测试: Twig 经过全面的单元测试。该库稳定可靠,可以用于大型项目。
- 文档齐全: Twig 文档齐全,提供专门的在线书籍,当然还有完整的 API 文档。
安全: 在安全性方面,Twig 具有一些独特的功能
自动输出转义: 为了安全起见,您可以全局或为代码块启用自动输出转义
1 2 3 4 5
{% autoescape "html" %} {{ var }} {{ var|raw }} {# var won't be escaped #} {{ var|escape }} {# var won't be doubled-escaped #} {% endautoescape %}
沙箱: Twig 可以在沙箱环境中评估任何模板,用户可以在沙箱环境中访问由开发人员定义的有限标签、过滤器和对象方法集。沙箱可以全局启用,也可以仅针对某些模板本地启用
1
{{ include('page.html', sandboxed = true) }}
- 清晰的错误消息: 每当模板中出现语法问题时,Twig 都会输出一条有用的消息,其中包含文件名和发生问题的行号。这大大简化了调试。
- 快速: Twig 的目标之一是尽可能快。为了实现最佳速度,Twig 将模板编译成纯粹优化的 PHP 代码。与常规 PHP 代码相比,开销已降至最低。