2022-04-20 02:28:40
Laravel Blade 模板引擎通过 with()、数组或 compact() 传递数据,并利用 @extends、@yield 和 @section 实现布局继承,从而提升视图管理的效率与可维护性。 以下是具体实现方法与示例:
一、Blade 模板数据传递在控制器中渲染视图时,可通过以下三种方式将数据传递给 Blade 模板:
使用 with() 方法在返回视图时链式调用 with() 添加变量,适合传递少量数据:
return view('welcome') ->with('name', 'Tom') ->with('age', 25);模板中直接访问变量:
{{ $name }},今年 {{ $age }} 岁传递数组给 view() 函数将数据以关联数组形式传入,适合批量传递数据:
$data = [ 'title' => '个人主页', 'user' => ['name' => 'Jerry', 'email' => 'jerry@example.com']];return view('profile', $data);模板中通过键名访问:
<h1>{{ $title }}</h1>{{ $user['name'] }}使用 compact() 简化代码若变量已存在,可用 compact() 自动打包为数组:
$name = 'Alice';$role = 'admin';return view('dashboard', compact('name', 'role'));模板中直接使用变量:
{{ $name }} 和 {{ $role }}通过定义主布局文件并继承,实现页面结构的复用与内容动态填充。
1. 创建主布局文件在 resources/views/layouts/ 下创建 app.blade.php,定义可替换区域:
<!DOCTYPE html><html><head> <title>@yield('title', '默认标题')</title></head><body> <header> <h1>网站标题</h1> <nav><a href="/">首页</a></nav> </header> <main> @yield('content') <!-- 子页面必须填充的内容区 --> </main> <footer> @section('footer') <p>版权所有 © 2025</p> @show </footer></body></html>@yield('title'):定义可选标题区域,默认显示“默认标题”。
@yield('content'):子页面必须填充的主要内容区。
@section ... @show:定义可被覆盖或追加的区块(如 footer)。
2. 子页面继承布局在子页面中使用 @extends 指定父布局,并通过 @section 填充内容:
@extends('layouts.app')@section('title', '首页 - 我的网站')@section('content') <h2>欢迎来到首页</h2> <p>这是主页内容。</p>@endsection子页面将继承 app.blade.php 的结构,并替换 title 和 content 区域。
3. 可选区块与追加内容若需保留父级内容并添加新内容,使用 @parent:
@section('footer') @parent <p>新增一行底部信息</p>@endsection最终 footer 区域会同时显示父级的版权信息和子页面的新增内容。
公共组件引入使用 @include 引入重复的页面组件(如导航栏):
@include('partials.nav')多层级继承确保路径正确,例如继承管理员布局:
@extends('layouts.admin')逻辑分离原则避免在模板中编写复杂逻辑,数据处理应放在控制器或服务类中,保持模板简洁。
掌握上述方法后,可高效构建结构清晰、易于维护的 Laravel 页面。