Blade 模板引擎中常用的指令和标签,以及作用和实际使用案例:
1. @extends
- 作用:继承一个 Blade 模板。通常用于定义一个父布局文件,其他子视图继承这个布局。
- 示例:
<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head><title>@yield('title')</title>
</head>
<body>@yield('content')
</body>
</html><!-- resources/views/home.blade.php -->
@extends('layouts.app')@section('title', 'Home Page')@section('content')<h1>Welcome to the home page!</h1>
@endsection
2. @section
与 @yield
- 作用:
@section
用于定义子视图中的内容,@yield
用于在父模板中定义可被子模板填充的内容区域。 - 示例:
<!-- resources/views/layouts/app.blade.php -->
<body>@yield('content')
</body><!-- resources/views/home.blade.php -->
@extends('layouts.app')@section('content')<p>This is the home page content.</p>
@endsection
3. @include
- 作用:引入另一个视图文件。
- 示例:
<!-- resources/views/includes/nav.blade.php -->
<nav><ul><li>Home</li><li>About</li></ul>
</nav><!-- resources/views/home.blade.php -->
@extends('layouts.app')@section('content')@include('includes.nav')<p>Welcome to the home page!</p>
@endsection
4. @if
, @elseif
, @else
, @endif
- 作用:条件判断。
- 示例:
@if ($user->isAdmin())<p>Welcome, Admin!</p>
@elseif ($user->isMember())<p>Welcome, Member!</p>
@else<p>Welcome, Guest!</p>
@endif
5. @foreach
, @for
, @while
, @forelse
- 作用:循环结构,遍历数组或集合。
@forelse
提供处理空数组的备用语法。 - 示例:
@foreach ($users as $user)<p>{{ $user->name }}</p>
@endforeach@forelse ($users as $user)<p>{{ $user->name }}</p>
@empty<p>No users found.</p>
@endforelse
6. {{ }}
与 {!! !!}
- 作用:
{{ }}
用于输出经过 HTML 实体转义的内容,{!! !!}
用于输出未经转义的 HTML。 - 示例:
<p>{{ $name }}</p> <!-- 安全输出,HTML 实体被转义 -->
<p>{!! $html !!}</p> <!-- 不转义,允许输出 HTML -->
7. @csrf
- 作用:生成 CSRF 令牌,用于防止跨站请求伪造攻击。
- 示例:
<form action="/submit" method="POST">@csrf<input type="text" name="name"><button type="submit">Submit</button>
</form>
8. @auth
与 @guest
- 作用:
@auth
仅在用户已通过身份验证时显示内容,@guest
仅在用户未登录时显示内容。 - 示例:
@auth<p>Welcome back, {{ auth()->user()->name }}!</p>
@endauth@guest<p>Please <a href="/login">login</a>.</p>
@endguest
9. @push
与 @stack
- 作用:
@push
向特定栈中添加内容,@stack
输出栈中的内容,通常用于添加脚本或样式。 - 示例:
<!-- 在子视图中 -->
@push('scripts')<script src="/example.js"></script>
@endpush<!-- 在父模板中 -->
<body><div class="content">@yield('content')</div>@stack('scripts')
</body>
10. @component
与 @slot
- 作用:
@component
用于定义复用组件,@slot
用于组件中的插槽。 - 示例:
<!-- 定义组件 -->
<div class="alert alert-{{ $type }}">{{ $slot }}
</div><!-- 使用组件 -->
@component('components.alert', ['type' => 'success'])<strong>Success!</strong> Your action was successful.
@endcomponent
11. @includeIf
, @includeWhen
, @includeUnless
- 作用:按条件引入视图。
@includeIf
视图存在时才引入,@includeWhen
根据条件引入,@includeUnless
当条件不满足时引入。 - 示例:
@includeIf('includes.nav')@includeWhen($user->isAdmin(), 'includes.admin')@includeUnless($user->isGuest(), 'includes.member')
12. @php
- 作用:在 Blade 模板中编写 PHP 代码块。
- 示例:
@php$message = 'Hello, World!';
@endphp<p>{{ $message }}</p>
13. @isset
与 @empty
- 作用:
@isset
检查变量是否存在,@empty
检查变量是否为空。 - 示例:
@isset($name)<p>{{ $name }}</p>
@endisset@empty($records)<p>No records found.</p>
@endempty
14. @verbatim
- 作用:在
@verbatim
区块中的内容不会被 Blade 解析,常用于包含原生 Vue.js 或其他前端框架的模板语法。 - 示例:
@verbatim<div id="app">{{ message }}</div>
@endverbatim
15. @can
与 @cannot
- 作用:
@can
用于检查当前用户是否有权限执行某个操作,@cannot
检查用户是否没有权限。 - 示例:
@can('update', $post)<button>Edit Post</button>
@endcan@cannot('update', $post)<p>You do not have permission to edit this post.</p>
@endcannot
16. @method
与 @error
- 作用:
@method
用于在表单中伪造 HTTP 动词,@error
用于显示表单验证错误信息。 - 示例:
<form action="/post/1" method="POST">@csrf@method('PUT')<input type="text" name="title" value="{{ old('title') }}">@error('title')<p>{{ $message }}</p>@enderror<button type="submit">Update</button>
</form>
17. @env
- 作用:检查当前环境。
- 示例:
@env('local')<p>You are in local environment.</p>
@endenv
18. @elseauth
与 @elseguest
- 作用:
@elseauth
在@auth
块中表示用户未通过身份验证时的分支,@elseguest
在@guest
块中表示用户已通过身份验证时的分支。 - 示例:
@auth<p>Welcome back, {{ auth()->user()->name }}!</p>
@elseauth<p>You are not logged in as an authenticated user.</p>
@endauth@guest<p>Welcome, Guest!</p>
@elseguest<p>Welcome, Authenticated User!</p>
@endguest
19. @switch
, @case
, @break
, @default
- 作用:实现类似 PHP 的
switch
语句。 - 示例:
@switch($role)@case('admin')<p>Welcome, Admin!</p>@break@case('editor')<p>Welcome, Editor!</p>@break@default<p>Welcome, User!</p>
@endswitch
20. @json
- 作用:将 PHP 数组或对象转换为 JSON 格式,并自动安全输出。
- 示例:
<script>var user = @json($user);
</script>
21. @hasSection
与 @show
- 作用:
检查某个 @section
是否存在,@show
表示立即输出指定 @section
并结束它的定义。
- 示例:
@hasSection('sidebar')<div class="sidebar">@yield('sidebar')</div>
@endif@section('sidebar')This is the sidebar content.
@show