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 指令会按照代码中的顺序依次执行,在嵌套使用指令时,要注意指令的执行顺序和作用域。
相关推荐
用户6757049885028 分钟前
告别数据库瓶颈!用这个技巧让你的程序跑得飞快!
后端
千|寻26 分钟前
【画江湖】langchain4j - Java1.8下spring boot集成ollama调用本地大模型之问道系列(第一问)
java·spring boot·后端·langchain
程序员岳焱39 分钟前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
龚思凯1 小时前
Node.js 模块导入语法变革全解析
后端·node.js
天行健的回响1 小时前
枚举在实际开发中的使用小Tips
后端
wuhunyu1 小时前
基于 langchain4j 的简易 RAG
后端
techzhi1 小时前
SeaweedFS S3 Spring Boot Starter
java·spring boot·后端
写bug写bug2 小时前
手把手教你使用JConsole
java·后端·程序员
苏三说技术2 小时前
给你1亿的Redis key,如何高效统计?
后端
JohnYan2 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql