跳转到主要内容

简介

Blade 是 Laravel 内置的一款简洁而强大的模板引擎。 不同于某些 PHP 模板引擎,Blade 不限制你在模板中使用原生 PHP 代码。 所有 Blade 模板都会被编译为 PHP 代码并进行缓存,因此几乎不会给应用带来额外开销。 Blade 模板文件使用 .blade.php 扩展名,通常存放在 resources/views 目录下。

Blade 编译流程

下图展示 .blade.php 文件如何被转换为 HTML 响应。文件一旦编译就会被缓存,因此同一模板的第二次及以后的请求会跳过编译。

显示数据

要显示传给 Blade 视图的数据,可将变量放在双大括号内。
Blade 的 {{ }} 会自动通过 PHP 的 htmlspecialchars 转义,从而防御 XSS 攻击。
除了变量,也可以显示 PHP 函数的结果。

输出未转义数据

若要跳过转义,请使用 {!! !!} 语法。
展示用户输入的数据时,务必使用 {{ }} 以启用自动转义。 在不可信的输入上使用 {!! !!} 会带来 XSS 风险。

与 JavaScript 框架共存

如果 JavaScript 框架也使用大括号,可用 @ 让 Blade 跳过该渲染。
此时 @ 会被 Blade 移除,{{ name }} 会原样发送到浏览器,由 JavaScript 框架渲染。
想比较是以 Blade 为主,还是拓展到 Livewire 或 Inertia,可以参阅前端

Blade 指令

条件分支(if 语句)

@unless 可以表达「若非……则」的条件。
判断变量是否定义或不为 null 可以使用 @isset@empty

认证相关指令

Switch 语句

循环

Blade 提供了处理循环的便利指令。
在循环中可通过 @break@continue 控制循环。
也可以把条件直接写在指令上。

循环变量

@foreach 循环中可以通过 $loop 变量获取循环信息。

注释

Blade 注释不会包含在渲染后的页面里。

布局

使用组件构建布局

Laravel 推荐使用 Blade 组件构建布局。 首先创建一个布局组件:
然后创建使用该布局的视图:

使用模板继承构建布局

传统的做法是使用 @extends@section@yield 的模板继承。 定义父布局:
子视图继承布局:
使用 @parent 可以在保留父布局 @section 内容的同时进行追加。

引入子视图

使用 @include 指令可以把一个 Blade 视图嵌入到另一个视图中。 父视图中可用的所有变量在被引入的视图中同样可用。
也可以额外传入变量。

表单的 CSRF 保护

web 路由中发送 POSTPUTPATCHDELETE 请求的 HTML 表单,必须包含 @csrf 指令。
要在表单中发送 PUTPATCHDELETE 请求时,请使用 @method
实际运维中的 CSRF 保护,包括 Origin 校验、X-CSRF-TOKEN / X-XSRF-TOKEN 头等,请参阅 CSRF 保护

小结

以下汇总了 Blade 模板引擎的主要功能。
使用 {{ $variable }} 输出带转义,{!! $variable !!} 输出不转义。
@if@elseif@else@endif@unless@isset@empty@auth@guest
@for@foreach@forelse@while,以及使用 $loop 变量控制。
组件模式(<x-layout>{{ $slot }})或模板继承(@extends@section@yield)。
使用 @include 将视图作为可复用组件嵌入。
最后修改于 2026年7月18日