Blade模板引擎简介
Blade是Laravel提供的一个既简单又强大的模板引擎和其它流行的PHP模板引擎不一样,Blade并不限制你在视图(view)中使用原生PHP代码,所有Blade视图页面都将被编译成原生PHP代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译;
模板继承
resources/views根目录下新建layout.blade.php文件用来放置公用部分
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>@yield('title')</title>
<style>
.header {
width: 1000px;
height: 150px;
margin: 0 auto;
background: #F5F5F5;
border: 1px solid #dddddd;
}
.main {
width: 1000px;
height: 300px;
margin: 0 auto;
margin-top: 15px;
clear: both;
/*border: 1px solid #dddddd;*/
}
.main .sidebar {
width: 300px;
height: 300px;
float: left;
border: 1px solid #DDD;
margin-right: 10px;
background: #F5F5F5;
}
.main .content {
width: 686px;
height: 300px;
float: left;
background: #F5F5F5;
border: 1px solid #DDD;
}
.footer {
width: 1000px;
height: 150px;
margin: 15px auto;
background: #F5F5F5;
border: 1px solid #dddddd;
}
</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>
section指令用来定义一个视图片段,yield指令用来展示某个指令section所代表的内容,可以把它想象成一个占位符,然后用子模板去实现它;
它们之间最大的区别是:yield是不可扩展,因为它在布局中只声明定义了一个视图片段,没有任何内容,相比之下section既可以在页面布局中定义一个视图片段也可以有内容还可以被子模板扩展;
StudentController.php控制器新建一个section方法
public function section() {
return view('student.section');
}
视图层resources/views建立student目录对应控制器,student目录下新建section.blade.php视图文件:
//继承公共模板文件
@extends('layout')
//重写header片段
@section('header')
//继承父模板里的内容
@parent
<a href="#">header</a>
@stop
//重写sidebar片段
@section('sidebar')
@parent
<b>sidebar</b>
@stop
//重写content片段
@section('content')
<b>content</b>
@stop
模板中输出PHP变量
public function section() {
$name = 'gsy';
$arr = ['gsy','wyx'];
return view('student.section',[
'name' => $name,
'arr' => $arr,
]);
}
页面输出
@section('content')
<b>content</b>
{{$name}}
@stop
模板中调用PHP代码
@section('content')
//直接使用PHP函数格式化时间戳
<p>{{ date('Y-m-d H:i:s',time()) }}</p>
//PHP数组函数in_array
<p>{{ in_array($name,$arr) ? 'true' : 'false' }}</p>
//打印数组
<p>{{ var_dump($arr) }}</p>
//isset短语法
<p>{{ $name or 'default' }}</p>
@stop
原样输出
<p>@{{ $name }}</p>
模板中的注释
//模板注释查看源代码无法看到,注释比较隐私的部分
{{--<b>content</b>--}}
//html的注释查看源代码能看到
<!--<b>content</b>--!>
引入子视图
@section('content')
//引入子视图同时可以传值,子视图调用
@include('student.common',['message' => '错误信息'])
@stop
Laravel中的流程控制
- if
@section('content')
@if ($name == 'gsy')
I'm gsy
@else
Who am I?
@endif
//if语句中使用php函数
@if (in_array($name,$arr))
true
@else
false
@endif
@stop
- for
@for ($i=0;$i<10;$i++)
<b>{{ $i }}</b>
@endfor
- foreach
控制器
public function section() {
$result = Student::get();
$name = 'gsys';
$arr = ['gsy','wyx'];
return view('student.section',[
'name' => $name,
'arr' => $arr,
'result' => $result,
]);
}
视图页
@foreach ($result as $result)
<b>{{ $result->name }}</b>
@endforeach
模板中的URL
Student控制器新建一个方法
public function urlTest() {
return 'Student控制器中的urlTest方法';
}
添加路由
Route::any('url',['as' => 'urls','uses' => 'StudentController@urlTest']);
section视图页生成url
//url()函数指定绑定的路由名跳转
<a href="{{ url('url') }}">url()</a>
//action()函数指定控制器及方法名
<a href="{{ action('StudentController@url') }}">action()</a>
//route()函数给定路由别名生成url
<a href="{{ route('urls') }}">route()</a>
在项目开发中一般都给它写一个路由的名字然后再写一个路由别名,生成路由一般使用route()和url()函数,用法比较简单,因为项目开发中一般给路由起好了名字很少会进行修改的;
在项目开发中操作成功之后如果要跳转到控制器对应方法里的页面时用:
return redirect()->action('PublicController@login');
切忌直接
return view('public/login');
这样会导致路由错乱从而引起一些错误,要跳转到对应方法里面然后自行加载试图页面;
课程总结
- 安装Laravel框架
- 核心目录文件介绍
- Laravel的路由
- Laravel中的MVC
- 数据库操作方式
- Blade模板引擎