Blade模板引擎简介及模板继承的使用
简介
- blade是laravel提供的一个既简单又强大的模板引擎
- 和其他流行的PHP模板引擎不一样,blade并不限制你在视图中使用原生PHP代码
- 所有blade视图页面都将被编译成原生的php代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。
模板继承-目录搭建
控制器构建
在app/Http/Controllers目录下的StudentController.php文件夹中:
<?php
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{
public function section1()
{
// student/section1 也可以替换成 student.section1推荐用点
return view('student.section1');
}
}
注意view('student.section1')等价于view('student/section1') 其意思为视图指向resources/views视图目录下的student目录中的section1.blade.php 推荐使用点替代斜线,如果视图在views目录下,那么就可以省略。
添加路由
在app/routes.php中:
Route::any('section1', [
'uses' => 'StudentController@section1'
]);
添加后可以通过localhost/laravel/public/section1进行访问
创建视图文件
在resources/views中,创建student目录(注意,目录名需要与控制器名相一致,这里的控制器名:studentController.php)
在student目录下再创建属于这个控制器的视图文件,section1.blade.php,同样,视图的命名要跟控制器中的方法名相同。
在resources/views中创建文件layouts.blade.php作为父模板文件。
模板继承-编辑模板文件
父类视图-layouts.blade.php
{{-- 这个文件一般用来放公用的部分 --}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板继承-@yield('title')</title>
<style>
.header {
width: 1000px;
height: 150px;
margin: 0 auto;
background: #f5f5f5;
border: 1px solid #ddd;
}
.main {
width: 1000px;
height: 300px;
margin: 15px auto;
clear: both;
}
.sidebar {
float: left;
width: 20%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.content {
float: right;
width: 75%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.footer {
width: 1000px;
height: 150px;
margin: 15px auto 0;
background: #f5f5f5;
border: 1px solid #ddd;
}
</style>
</head>
<body>
<div class="header">
@section('header')
头部
@show
</div>
<div class="main">
<div class="sidebar">
@section('sidebar')
侧边栏
@show
</div>
<div class="content">
@yield('content', '主要内容区')
</div>
</div>
<div class="footer">
@section('footer')
底部
@show
</div>
</body>
</html>
编辑student/section1.blade.php
继承父模板
@extends('layouts')
@extends就是继承父类的模板,如果模板在views目录下,那么直接填入模板名即可,比如这里的父模板是layouts.blade.php,那么继承父模板直接@extends('layouts')即可。
如果要继承的模板是student/layouts.blade.php,那么@extends('student/layouts')即可。
关于添加注释
在blade模板文件中,添加注释使用:
{{--这里是注释--}}
或者
{{-- 这里是注释 --}}
但是需要特别注意,在注释中不能出现@否则会编译错误:
{{--@extends是...--}} // 报错
{{--@ extends是...--}} // 正确编译
{{--@-extends是...--}} // 正确编译
修改父类视图模板中的内容
修改父视图中的内容:
@section('sidebar')
重写sidebar中的内容
@stop
在子视图中引入父视图的内容
@section('header')
@parent
在原有模板中内容基础上添加的内容
@stop
@parent是将父模板中的内容也输出,不想继承父视图中的就去掉parent就可以完全进行重写
yield中的内容也可以使用section指定:
@section('content')
content
@stop
仅仅运行父视图效果:
在子视图中继承并修改后的效果:
关于laravel中blade模板中的比如@section等作用于异同,请见我的另一篇文章