Laravel之Blade模板引擎

Blade是Laravel提供的一个既简单又强大的模板引擎,Blade允许在视图中使用原生PHP代码,所有Blade视图页面都将被编译成原生php代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。

1.模板继承

 一个网站,往往很多界面有相同的区块,比如导航栏,底部栏,顶部栏。这些界面只有主内容区域不一样。为了提高代码的复用性,我们可以将这些相同的区块放在布局模板里,然后让其它模板去继承它,其它模板称为子模板。这样一来,子模板就可以轻松获得与布局模板一样的内容。而且,子模板还可以做适当的修改。

resources->views目录下新建一个模板layouts.blade.php。布局模板。

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>轻松学会Laravel - @yield('title')</title>  
  6.     <style>  
  7.         .header {  
  8.             width: 1000px;  
  9.             height: 150px;  
  10.             margin:0 auto;  
  11.             background: #f5f5f5;  
  12.             border: 1px solid #ddd;  
  13.         }  
  14.         .main {  
  15.             width: 1000px;  
  16.             height: 300px;  
  17.             margin:0 auto;  
  18.             margin-top: 15px;  
  19.             clear: both;  
  20.         }  
  21.         .main .sidebar {  
  22.             float: left;  
  23.             width: 20%;  
  24.             height: inherit;  
  25.             background: #f5f5f5;  
  26.             border: 1px solid #ddd;  
  27.         }  
  28.         .main .content {  
  29.             float: right;  
  30.             width: 75%;  
  31.             height: inherit;  
  32.             background: #f5f5f5;  
  33.             border: 1px solid #ddd;  
  34.         }  
  35.         .footer {  
  36.             width: 1000px;  
  37.             height: 150px;  
  38.             margin:0 auto;  
  39.             margin-top: 15px;  
  40.             background: #f5f5f5;  
  41.             border: 1px solid #ddd;  
  42.         }  
  43.     </style>  
  44. </head>  
  45. <body>  
  46.     <div class="header">  
  47.         @section('header')  
  48.         头部  
  49.         @show  
  50.     </div>  
  51.     <div class="main">  
  52.         <div class="sidebar">  
  53.             @section('sidebar')  
  54.             侧边栏  
  55.             @show  
  56.         </div>  
  57.           
  58.         <div class="content">  
  59.             @yield('content','主要内容区域')  
  60.         </div>  
  61.     </div>  
  62.     <div class="footer">  
  63.         @section('footer')  
  64.         底部  
  65.         @show  
  66.     </div>  
  67. </body>  
  68. </html>  

解读:

@section('header')  模板的一部分。子模板可以继承,可以改变内容。

@yield('title')   模板的一部分。子模板可以继承,可以改变内容。

@yield('content',主要内容区域)    模板的一部分。子模板可以继承,可以改变内容,有默认值。


然后在当前目录下新建一个目录student,在里面写section1.blade.php,子模板。

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @extends('layouts')   //继承公共模板,如果公共模板在views下,则直接写模板的名称  
  2. @section('header')   //对header重写,要@section('header') 和@stop配对使用  
  3.    @parent   //此句把父模板的内容的header部分也输出来  
  4.   重写头部  
  5. @stop  
  6. @section('content')   //  重写yield,和section一样  
  7.   重写yield里的内容  
  8. @stop  
子模板如果要对公共模板的内容做修改,则使用@section 和@stop配对。里面写子模板自己的内容。

然后在student控制器里新增一个方法,

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public function test4(){  
  2. /*模板继承*/  
  3. return view('student/section1');  
  4. }  

配置好路由:Route::get('test4',['uses'=>'StudentController@test4']);


2.基础语法及inude的使用

(1)模板中输出php变量

在控制器里写:

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public function test4(){  
  2.       $name='zls';  
  3.       return view('student/section1',['name'=>$name]);  
  4. }  

模板section1.blade.php里写:

  <p>{{$name}}</p>     //这样就能输出了

(2)模板里调用php代码

和原生的php没有很大的区别,只是将php的标签换成了{{}}而已,其它都一样。

介绍一个短语法:

<p>{{$name or 'empty'}}</p>   若 $name存在则输出$name,否则输出’empty’.

3)原样输出,加@符,这样{{}}里的代码就不会解析了

  <p>@{{$name or 'empty'}}</p>

 4)模板中的注释。使用 {{--    --}}。

  {{-- 模板中的注释 --}}

发现这个注释查看源里不显示

 5)引入子视图include

student目录下新建一个common视图,写:<p>我是include</p>.

然后在section1视图里写:@include('student.common')

@include(‘目录名/视图名’)

 

当然也可以向子视图传值:

common视图里写:<p>我是include{{$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>{{$i}}</p>

  @endfor

 4)<!--foreach语句-->

 student控制器里写:

 public function test4(){

/*模板继承*/

$name='zls';

$students=Student::get();

    return view('student/section1',['name'=>$name,'students'=>$students]);

}

模板里写:

  @foreach ($students as $student)

      <p>{{$student->vip_name}}</p>

  @endforeach

(5)<!--forelse语句-->

  @forelse ($students as $student)

      <p>{{$student->vip_name}}</p>

  @empty

      <p>null</p>

  @endforelse

foreach一样,只是当数组为空时,会输出null

3.模板中的URL

3种方式生成url。

url()  路由的方式(这个最简单)

action()  控制器名+方法名

route()   路由别名的方式

具体操作:

 student控制器里新增一个test5方法,用来测试

public function test5(){

echo "你跳转到了test5";

}

 section1模板里写:

  <a href="{{url('test5')}}">url()点击跳转到test5里(路由方式)</a>

  <a href="{{action('StudentController@test5')}}">action() 点击跳转到test5里(控制器名@方法名方式)</a>

  <a href="{{route('url')}}">route()点击跳转到test5里( 路由别名方式)</a>

 

 

路由配置:Route::get('test5',['as'=>'url','uses'=>'StudentController@test5']);

Url访问laravel/public/test4

转载来自:http://blog.csdn.net/zls986992484/article/details/52755037

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值