官方文档简介
Blade 是 Laravel 提供的一个既简单又强大的模板引擎。和其他流行的 PHP 模板引擎不一样,Blade 并不限制你在视图中使用原生 PHP 代码。所有 Blade 视图文件都将被编译成原生的 PHP 代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着 Blade 基本上不会给你的应用增加任何额外负担。Blade 视图文件使用 .blade.php
扩展名,一般被存放在resources/views
目录。
1.模板继承:section、yield、extends、parent
实例:1.创建一个视图模板:
<html> <head> <title>Test</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; } .main .sidebar{ float: left; width: 20%; height: inherit; background: #f5f5f5; border: 1px solid #dddddd; } .main .content{ float: right; width: 75%; height: inherit; background: #f5f5f5; border: 1px solid #dddddd; } .footer{ width: 1000px; height: 150px; margin: 0 auto; margin-top: 15px; background: #f5f5f5; border: 1px solid #dddddd; } </style> </head> <body> <div class = "header"> @section('header') This is Headers @show </div> <div class="main"> <div class="sidebar"> @section('sidebar') This is sidebar @show </div> <div class="content"> @yield('content','This is content') </div> </div> <div class="footer"> @section('footer') This is footer @show </div> </body> </html>
其中,@section 和 @yield的区别在于
@section既可以单独显示父模板的默认内容,也可以单独显示子模板的新内容,通过@parent还可以同时显示父子模板中的内容
@yield只能显示其中一个,子模板不定义,就用父模板默认的,子模板定义,父模板的内容会被覆盖,通过@parent也不能显示。
在子模板中调用视图模板
@extends('Test') @section('header') @parent //@parent,直接调用模板视图 头部 //重新定义模板视图 @stop @section('sidebar') 侧边框 @stop @section('content') 在模板视图定义为yield,所以@parent不会输出原视图,只有在没重定义视图的情况下显示默认视图 主要内容 @stop @section('footer') @parent 页脚 @stop
模板中输出php变量
//模板中输出php变量
@section('content')
<p>{{$name}}</p>
//模板中输出PHP代码
<p>{{time()}}</p>
<p>{{date('Y-m-d h:i:s',time())}}</p>
{{-- <p>{{var_dump($arr)}}</p>--}}
//inarray
<p>{{ in_array($name,$arr)? 'ture':'false' }}</p>
//isset和or功能相似,都是判断变量是否存在
<p>{{ isset($name)? $name :'default' }}</p>
<p>{{ $name or 'test' }}</p>
//原样输出,在前面加@
<p>@{{$name}}</p>
<p>模板中的注释:</p>{{--在浏览器中是不会显示的--}}
//引入子视图
@include('test.play',['massige'=>'测试'])
子视图实例:<p>This is a page {{$massige}}</p>
@stop
模板中的流程控制:if、unless、for、foreach
unless相当于if取反,例:if($name=='zhoupeng_L')==unless($name!='zhoupeng_L')
基本语法:
@if($name == 'zhoupeng_L')
I'm zhoupeng_L
@elseif($name == 'shuting_H')
I'm shuting_H
@else
who am i?
@endif
语法均为@+语法开头,@end+语法结尾
foreach还有一个变形forelse,判断
@forelse($students as $student)
<p>{{$student->name}}</p>
@empty
<p>null</p>
@endforelse
模板中的URL:url()、action()、route()
<br>
<a href="{{url('urltest')}}">url引用url名方法 </a>
<br>
<a href="{{action('StudentController@urltest')}}">action引用控制器+方法 方法</a>
<br>
<a href="{{route('url')}}">route引用别名</a>
路由设置为:Route::any('/urltest',['as'=>'url','uses'=>'StudentController@urltest']);
//模板中输出php变量
@section('content') <p>{{$name}}</p> //模板中输出PHP代码 <p>{{time()}}</p> <p>{{date('Y-m-d h:i:s',time())}}</p> {{-- <p>{{var_dump($arr)}}</p>--}} //inarray <p>{{ in_array($name,$arr)? 'ture':'false' }}</p> //isset和or功能相似,都是判断变量是否存在 <p>{{ isset($name)? $name :'default' }}</p> <p>{{ $name or 'test' }}</p> //原样输出,在前面加@ <p>@{{$name}}</p> <p>模板中的注释:</p>{{--在浏览器中是不会显示的--}} //引入子视图 @include('test.play',['massige'=>'测试'])
子视图实例:<p>This is a page {{$massige}}</p>
@stop
Route::any('/urltest',['as'=>'url','uses'=>'StudentController@urltest']);