首页
/ MtHaml项目中的Twig语法详解:Haml与Twig的完美结合

MtHaml项目中的Twig语法详解:Haml与Twig的完美结合

2025-06-08 16:33:26作者:廉皓灿Ida

什么是MtHaml/Twig

MtHaml是一个将Haml简洁语法与Twig模板引擎相结合的项目。Haml是一种HTML的简洁语法表示法,通过缩进和特殊符号来简化HTML编写,而Twig是PHP生态中广泛使用的模板引擎。MtHaml/Twig让开发者可以同时享受Haml的简洁语法和Twig的强大功能。

Haml基础语法快速入门

基本标签语法

在Haml中,标签以百分号(%)开头,后跟标签名。这与传统HTML的尖括号语法形成鲜明对比:

%strong= item.title

等价于Twig模板:

<strong>{{ item.title }}</strong>

这里的=符号表示后面的内容是Twig表达式,需要被解析并输出。

属性添加方式

Haml提供了多种方式来添加HTML属性:

  1. 类似HTML的语法
%strong(class="code" id="message") Hello, World!
  1. CSS风格的简写(特别适合class和id):
%strong.code#message Hello, World!
  1. 默认div标签(当省略标签名时):
.message Hello, World!

等价于:

<div class="message">Hello, World!</div>

嵌套结构与缩进规则

Haml使用缩进来表示嵌套关系,这与Python类似。缩进规则决定了标签的自动闭合:

#content
  .left.column
    %h2 Welcome to our site!
    %p= information
  .right.column
    - include "sidebar.twig"

会被转换为:

<div id="content">
  <div class="left column">
    <h2>Welcome to our site!</h2>
    <p>{{ information }}</p>
  </div>
  <div class="right column">
    {% include "sidebar.twig" %}
  </div>
</div>

重要规则

  • 当有内联内容时,标签在同一行自动闭合
  • 否则,当缩进级别降低到与开始标签相同时自动闭合
  • 自闭合标签(如img、meta)有特殊处理规则

Haml与Twig的交互方式

输出Twig表达式

在Haml中输出Twig表达式主要有以下几种方式:

  1. 使用=符号
%p.para= some.twig()|expression

转换为:

<p class="para">{{ some.twig()|expression }}</p>
  1. 字符串插值
%span Hello #{ name }

转换为:

<span>Hello {{ name }}</span>
  1. 属性值中的表达式
%span(id=any_valid_twig|syntax)

转换为:

<span id={{ any_valid_twig|syntax }}></span>

Twig控制结构

不直接输出的Twig代码(控制结构)以-开头:

%p
  - if some.condition|default(0) > 1 or foo in bar
    This is a control structure

转换为:

<p>
  {% if some.condition|default(0) > 1 or foo in bar %}
    This is a control structure
  {% endif %}
</p>

自动闭合规则

  • 如果标签后有缩进内容,MtHaml会自动添加结束标签
  • 否则,不添加结束标签

高级用法示例

  1. 继承与块
- extends "layout.twig"

- block title "this is an inline block"

- block body
  .content
    %h1 Title
    This block has contents
  1. 宏定义
- macro input_text(name, value)
  %input(type="text" name=name value=value)

- import _self as forms

= forms.input_text("foo", "bar")

最佳实践与注意事项

  1. 缩进一致性:必须保持严格的缩进一致性,建议使用空格而非制表符
  2. 表达式平衡:在属性值中,确保括号、引号等符号成对出现
  3. Twig功能全支持:MtHaml支持所有Twig功能,包括过滤器、测试、运算符等
  4. 自定义标签:可以无缝使用自定义Twig标签

MtHaml/Twig结合了Haml的简洁性和Twig的强大功能,为模板开发提供了高效、优雅的解决方案。通过理解其转换规则,开发者可以充分利用两者的优势,编写出更简洁、更易维护的模板代码。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
178
262
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
866
513
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
261
302
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
598
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K