first
小李世界
4年前
修改理由:
此投稿已在 4年前 合并。
内容修改:
Old | New | Differences |
---|---|---|
1 | ||
1 | ## 模板继承 | |
2 | ||
3 | ### 定义布局 | |
4 | ||
5 | Blade 的两个主要优点是`模板继承`和`区块`。为方便入门,让我们先通过一个简单的例子来上手。首先,我们来研究一个「主」页面布局。因为大多数 web 应用会在不同的页面中使用相同的布局方式,因此可以很方便地定义单个 Blade 布局视图: | |
6 | ||
7 | ``` | |
8 | <!-- 保存在 resources/views/layouts/app.blade.php 文件中 --> | |
9 | ||
10 | <html> | |
11 | <head> | |
12 | <title>App Name - @yield('title')</title> | |
13 | </head> | |
14 | <body> | |
15 | @section('sidebar') | |
16 | This is the master sidebar. | |
17 | @show | |
18 | ||
19 | <div class="container"> | |
20 | @yield('content') | |
21 | </div> | |
22 | </body> | |
23 | </html> | |
24 | ``` | |
25 | ||
26 | 如你所见,该文件包含了典型的 HTML 语法。不过,请注意 `@section` 和 `@yield` 指令。 `@section` 指令定义了视图的一部分内容,而 `@yield` 指令是用来显示指定部分的内容。 | |
27 | ||
28 | 现在,我们已经定义好了这个应用程序的布局,接下来,我们定义一个继承此布局的子页面。 | |
29 | ||
30 | ### 扩展布局 | |
31 | ||
32 | 在定义一个子视图时,使用 Blade 的 `@extends` 指令指定子视图要「继承」的视图。扩展自 Blade 布局的视图可以使用 `@section` 指令向布局片段注入内容。就如前面的示例中所示,这些片段的内容将由布局中的显示在布局中 `@yield` 指令控制显示: | |
33 | ||
34 | ``` | |
35 | <!-- 保存在 resources/views/child.blade.php 中 --> | |
36 | ||
37 | @extends('layouts.app') | |
38 | ||
39 | @section('title', 'Page Title') | |
40 | ||
41 | @section('sidebar') | |
42 | @parent | |
43 | ||
44 | <p>This is appended to the master sidebar.</p> | |
45 | @endsection | |
46 | ||
47 | @section('content') | |
48 | <p>This is my body content.</p> | |
49 | @endsection | |
50 | ``` | |
51 | ||
52 | 在这个示例中, `sidebar` 片段利用 `@parent` 指令向布局的 sidebar 追加(而非覆盖)内容。 在渲染视图时,`@parent` 指令将被布局中的内容替换。 | |
53 | ||
54 | > 和上一个示例相反,这里的 `sidebar` 片段使用 `@endsection` 代替 `@show` 来结尾。 `@endsection` 指令仅定义了一个片段, `@show` 则在定义的同时 **立即 yield** 这个片段。 | |
55 | ||
56 | Blade 视图可以使用全局 `view` 助手自路由中返回: | |
57 | ||
58 | ``` | |
59 | Route::get('blade', function () { | |
60 | return view('child'); | |
61 | }); | |
62 | ``` |