12.Laravel Blade模板引擎语法规则

Laravel Blade 是一种简洁、强大的模板引擎,使用它有一些特定的规则和约定,以下从不同方面为你介绍:

1. 基本语法规则

输出表达式

  • 双花括号语法 :使用 {{ }} 来输出 PHP 变量或表达式的值,输出内容会自动进行 HTML 实体转义,防止 XSS 攻击。
html 复制代码
{{ $name }}
{{ 1 + 2 }}
  • 三花括号语法 :使用 {!! !!} 输出内容时不会进行 HTML 实体转义,可直接输出 HTML 代码,但要谨慎使用,防止安全问题。
html 复制代码
{!! $htmlContent !!}

注释

使用 {{-- --}} 进行注释,这种注释不会在最终生成的 HTML 中显示。

html 复制代码
{{-- 这是一个Blade注释 --}}

2. 控制结构规则

条件语句

  • @if@elseif@else@endif:用于实现条件判断。
html 复制代码
@if ($age < 18)
    你是未成年人。
@elseif ($age >= 18 && $age < 60)
    你是成年人。
@else
    你是老年人。
@endif
  • @unless :与 @if 相反,条件为假时执行代码块。
html 复制代码
@unless ($isAdmin)
    你没有管理员权限。
@endunless

循环语句

  • @for :用于传统的 for 循环。
html 复制代码
@for ($i = 0; $i < 5; $i++)
    <p>这是第 {{ $i }} 次循环</p>
@endfor
  • @foreach:用于遍历数组或集合。
html 复制代码
@foreach ($users as $user)
    <p>{{ $user->name }}</p>
@endforeach
  • @while :用于 while 循环。
html 复制代码
@while ($count < 10)
    <p>当前计数: {{ $count }}</p>
    <?php $count++; ?>
@endwhile

3. 布局和组件规则

布局

  • @extends:用于继承一个布局模板。
html 复制代码
@extends('layouts.app')
  • @section@yield@section 用于在子视图中定义内容区域,@yield 用于在布局模板中预留内容区域。
html 复制代码
{{-- 布局模板 layouts/app.blade.php --}}
<!DOCTYPE html>
<html lang="en">
<head>
    <title>@yield('title', '默认标题')</title>
</head>
<body>
    @yield('content')
</body>
</html>

{{-- 子视图 --}}
@extends('layouts.app')

@section('title', '自定义标题')

@section('content')
    <h1>欢迎来到页面</h1>
@endsection

组件

  • 组件定义 :在 resources/views/components 目录下创建组件视图文件,如 button.blade.php

  • 组件使用 :使用 <x-组件名> 语法引入组件,并可以传递属性。

html 复制代码
<x-button type="primary">点击我</x-button>

4. 表单和路由规则

表单

  • @csrf :在表单中使用 @csrf 指令生成 CSRF 令牌,防止跨站请求伪造。
html 复制代码
<form method="POST" action="{{ route('submit.form') }}">
    @csrf
    <input type="text" name="name">
    <button type="submit">提交</button>
</form>

路由

  • route 函数 :在 Blade 模板中使用 route 函数生成路由链接。
html 复制代码
<a href="{{ route('user.profile', ['id' => $user->id]) }}">查看用户资料</a>

5. 自定义指令规则

可以使用 Blade::directive 方法自定义指令。自定义指令通常用于封装一些常用的逻辑。

php 复制代码
// 在服务提供者的 boot 方法中定义自定义指令
use Illuminate\Support\Facades\Blade;

Blade::directive('datetime', function ($expression) {
    return "<?php echo ($expression)->format('Y-m-d H:i:s'); ?>";
});

在 Blade 模板中使用自定义指令:

html 复制代码
@datetime($createdAt)

6. 继承和优先级规则

  • 继承顺序 :子视图继承布局模板后,子视图中的内容会覆盖布局模板中对应 @yield 区域的默认内容。
  • 指令优先级:Blade 指令会按照代码中的顺序依次执行,在嵌套使用指令时,要注意指令的执行顺序和作用域。
相关推荐
薯条不要番茄酱21 分钟前
【SpringBoot】从零开始全面解析SpringMVC (二)
java·spring boot·后端
小林学习编程35 分钟前
Springboot考研信息平台
spring boot·后端·考研
长勺1 小时前
Spring Security vs Shiro vs Sa-Token
java·后端·spring
yezipi耶不耶2 小时前
Rust入门之高级Trait
开发语言·后端·rust
qq_12498707532 小时前
原生小程序+springboot+vue+协同过滤算法的音乐推荐系统(源码+论文+讲解+安装+部署+调试)
java·spring boot·后端·小程序·毕业设计·课程设计·协同过滤
后青春期的诗go2 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(一)
开发语言·后端·rust
信徒_3 小时前
SpringBoot 自动装配流程
java·spring boot·后端
景天科技苑3 小时前
【Rust闭包】rust语言闭包函数原理用法汇总与应用实战
开发语言·后端·rust·闭包·闭包函数·rust闭包·rust闭包用法
-曾牛12 小时前
基于微信小程序的在线聊天功能实现:WebSocket通信实战
前端·后端·websocket·网络协议·微信小程序·小程序·notepad++
Warren9814 小时前
Java面试八股Spring篇(4500字)
java·开发语言·spring boot·后端·spring·面试