Blade是Laravel提供的一个既简单又强大的模板引擎,Blade允许在视图中使用原生php代码,所有Blade视图页面都将被编译成原生php代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。
1.模板继承
一个网站,往往很多界面有相同的区块,比如导航栏,底部栏,顶部栏。这些界面只有主内容区域不一样。为了提高代码的复用性,我们可以将这些相同的区块放在布局模板里,然后让其它模板去继承它,其它模板称为子模板。这样一来,子模板就可以轻松获得与布局模板一样的内容。而且,子模板还可以做适当的修改。
在resources->views目录下新建一个模板layouts.blade.php。布局模板。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>轻松学会Laravel - @yield('title')</title>
<style>
.header {
width: 1000px;
height: 150px;
margin:0 auto;
background: #f5f5f5;
border: 1px solid #ddd;
}
.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 #ddd;
}
.main .content {
float: right;
width: 75%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.footer {
width: 1000px;
height: 150px;
margin:0 auto;
margin-top: 15px;
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>
解读:
@section('header') 模板的一部分。子模板可以继承,可以改变内容。
@yield('title') 模板的一部分。子模板可以继承,可以改变内容。
@yield('content',主要内容区域) 模板的一部分。子模板可以继承,可以改变内容,有默认值。
然后在当前目录下新建一个目录student,在里面写section1.blade.php,子模板。
@extends('layouts') //继承公共模板,如果公共模板在views下,则直接写模板的名称
@section('header') //对header重写,要@section('header') 和@stop配对使用
@parent //此句把父模板的内容的header部分也输出来
重写头部
@stop
@section('content') // 重写yield,和section一样
重写yield里的内容
@stop
子模板如果要对公共模板的内容做修改,则使用@section 和@stop配对。里面写子模板自己的内容。
然后在student控制器里新增一个方法,
public function test4(){
/*模板继承*/
return view('student/section1');
}
配置好路由:Route::get('test4',['uses'=>'StudentController@test4']);
2.基础语法及inude的使用
(1)模板中输出php变量
在控制器里写:
public function test4(){
$name='zls';
return view('student/section1',['name'=>$name]);
}
模板section1.blade.php里写:
<p>{undefined{$name}}</p> //这样就能输出了
(2)模板里调用php代码
和原生的php没有很大的区别,只是将php的标签换成了{undefined{}}而已,其它都一样。
介绍一个短语法:
<p>{undefined{$name or 'empty'}}</p> 若 $name存在则输出$name,否则输出’empty’.
(3)原样输出,加@符,这样{undefined{}}里的代码就不会解析了
<p>@{undefined{$name or 'empty'}}</p>
(4)模板中的注释。使用 {undefined{-- --}}。
{undefined{-- 模板中的注释 --}}
发现这个注释查看源里不显示
(5)引入子视图include
在student目录下新建一个common视图,写:<p>我是include</p>.
然后在section1视图里写:@include('student.common')
@include(‘目录名/视图名’)
当然也可以向子视图传值:
在common视图里写:<p>我是include{undefined{$message}}</p>.
然后在section1视图里写:@include('student.common',['message'=>'我是错误信息'])
2.流程控制
(1)<!--if语句-->
使用@符号,并且要有开始和结束标签
@if($name=='zls')
is zls
@elseif($name=='imooc')
is imooc
@else
not
@endif
另外if条件里面也是可以用函数的: @if(isset($name))
(2)<!--unless语句--> 是if的取反
@unless($name=='zls')
@unless
(3) <!--for语句-->
@for ($i=0;$i<5;$i++)
<p>{undefined{$i}}</p>
@endfo
(4)<!--foreach语句-->
在student控制器里写:
public function test4(){undefined
/*模板继承*/
$name='zls'
$students=Student::get();
return view('student/section1',['name'=>$name,'students'=>$students]);
}
模板里写:
@foreach ($students as $student)
<p>{undefined{$student->vip_name}}</p>
@endforeach
(5)<!--forelse语句-->
@forelse ($students as $student)
<p>{undefined{$student->vip_name}}</p>
@empty
<p>null</p>
@endforelse
和foreach一样,只是当数组为空时,会输出null
3.模板中的URL
有3种方式生成url。
url() 路由的方式(这个最简单)
action() 控制器名+方法名
route() 路由别名的方式
具体操作:
在student控制器里新增一个test5方法,用来测试
public function test5(){undefined
echo "你跳转到了test5";
}
在section1模板里写:
<a href="{undefined{url('test5')}}">url()点击跳转到test5里(路由方式)</a>
<a href="{undefined{action('StudentController@test5')}}">
action() 点击跳转到test5里(控制器名@方法名方式
</a>
<a href="{undefined{route('url')}}">route()点击跳转到test5里( 路由别名方式)</a>
路由配置:Route::get('test5',['as'=>'url','uses'=>'StudentController@test5']);
Url访问laravel/public/test4
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。