Laravel 模板继承
主页面布局
主页面布局定义了所有网页的通用布局。所有的Web应用都有主页面布局来定义所有网页的通用布局。Blade模板引擎定义了可以由所有网页扩展的主布局。主页面布局位于 /resources/views/layouts/ 目录中。
让我们通过一个示例来了解。
- 首先,在 resources/views/ 目录下创建名为’ layout ‘的文件夹。
- 现在,在布局文件夹中创建一个新文件’ master.blade.php ‘。
- 我们在 master.blade.php 文件中添加以下代码。
master.blade.php
<html>
<head>
<title> Master Page Layout </title>
</head>
<body>
<div class="container">
@yield('content')
</div>
@yield('footer')
</body>
</html>
在上面的代码中,我们使用了@yield指令。@yield用于显示内容。@yield(‘content’)显示’content’的内容,而@yield(‘footer’)显示页脚的内容。
扩展主布局
- 现在我们要在contact.blade.php文件中扩展上面的主布局,如下所示:
Contact.blade.php
@extends('layout.master')
@section('content')
<h1>Contact Page </h1>
@stop
在上面的代码中,我们使用了 @extends 指令。 ‘@extends’指令用于继承在 contact.blade.php 文件中的blade布局。’@section(‘content’)’定义了内容的部分。
- 现在,在 web.php 文件中添加以下路由。
Route::get('/contact', function () {
return view('contact');
});
输出
我们还可以在 contact.blade.php 文件中添加javascript代码。假设我在 contact.blade.php 文件中添加了以下代码。
@section('footer')
<script> alert("Hello JavaTpoint") </script>
@stop
在上面的代码中,我创建了一个警告框,显示消息” 你好JavaTpoint “。
输出结果
让我们来看一个blade模板的另一个例子。
- 我们创建一个名为 post.blade.php 的新文件。
post.blade.php
@extends('layout.master')
@section('content')
<h1>Post Page:</h1>
<h2>id is :{{id}}<br> Password is :{{password}}<br>Name is : {{$name}}</h2>
@stop
上面的代码定义了显示id、password和name值的内容部分。
- 现在,我们创建一个名为 PostController.php 的控制器。
PostController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
//
public function show_post(id,password,$name)
{
return view('post',compact('id','password','name'));
}}
在 PostController.php 文件中,我们定义了一个名为 show_post() 的新函数,该函数将数据传递给 post.blade.php 文件。
- 最后,在 web.php 文件中定义了一个路由。
web.php
Route::get('/post/{id}/{password}/{name}','PostController@show_post');
输出
到目前为止,我们已经看到post.blade.php
和contact.blade.php
两个文件都继承了主文件布局。 这是主布局的主要优势,每个文件都可以扩展主文件的布局并添加自己的功能。
使用@parent指令
@parent
指令的作用是显示在主布局中定义的部分的内容。
让我们通过一个例子来理解。
- 首先,我们创建一个主文件。
master.blade.php
<html>
<head>
<title> Master Page Layout </title>
</head>
<body>
<div class="container">
@yield('content')
</div>
@section('footer')
This is footer
@show
</body>
</html>
- 现在,我们创建 contact.blade.php 文件,该文件扩展了上述的 master.blade.php 文件。
@extends('layout.master')
@section('content')
<h1>Contact Page</h1>
@stop
@section('footer')
@parent
<p>this is appended</p>
@stop
在上述代码中, @parent 指令将段落内容添加到页脚部分。
输出结果