当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel实现通过blade模板引擎渲染视图

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-18 10:31:30 浏览: 评论:0 

今天小编就为大家分享一篇Laravel实现通过blade模板引擎渲染视图,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

laravel提供了blade模板引擎用于视图的渲染,在blade中可以直接使用PHP代码,并且blade最终也会被编译为php缓存起来,只有在blade文件被修改后才会重新编译,这一点可以节省开销提高应用性能。blade文件.blade.php作为视图文件存放于laravel的resource/views目录下。

1、定义模板

blade定义模板页面同创建html页面一样,只不过在适当的位置通过@section或@yield来占位,当其它页面引用模板页时将内容填充到占位的位置即可

  1. <html> 
  2.  <head> 
  3.   <title>@yield('title')</title> 
  4.  </head> 
  5.  <body> 
  6.   <header class="header"
  7.    @section('header'
  8.     这是头部<br> 
  9.    @show 
  10.   </header> 
  11.   <div class="middle"
  12.    <aside class="aside"
  13.     这是侧边栏 
  14.     @yield('aside'
  15.    </aside> 
  16.    <div class="content"
  17.     @section('content'
  18.     这是主体内容 
  19.     @show 
  20.    </div> 
  21.   </div> 
  22.   <footer class="footer"
  23.    这是底部 
  24.    @yield('footer'
  25.   </footer> 
  26.  </body> 
  27. </html> 

section与yield都是占位符,其区别体现在引用模板时,当使用yield时会完全将指定的占位符替换掉,而使用section时可以通过@parent来保留@section()~@show之间的内容。

如果需要在blade中引入外部js、css文件可以采用相对public目录的绝对路径,例如引入自带的bootstrap,位于public/css/app.css,可以<link rel="stylesheet" href="{{ asset('./css/app.css')}}" rel="external nofollow" >

2、引用模板

引用模板首先需要通过@extends()引入你需要使用的模板,模板位置相对于views目录。然后通过@section()~@stop(注意与定义模板时的@section~@show区别),将你所需要替换的内容填充到模板的指定位置,例如要填充header对应的section:

  1. @extends('template.layout')  {{--引入模板views/template/layout.blade.php--}} 
  2.  
  3. @section('title'
  4.  
  5. 登录界面 
  6.  
  7. @stop 
  8.  
  9. @section('header')    {{--填充到header对应的占位符--}} 
  10.  
  11. @parent      {{--保留模板原内容--}} 

头部替换内容

@stop

引入组件:通过@component来引入组件模板。比如定义了一个通用的错误提示组件alert:

  1. <div style="color: #ff5b5d;"> 
  2.  <h5>{{$title}}</h5> 
  3.  {{$slot}} 
  4. </div> 

在页面中使用该组件:

  1. @component('template.alert') {{--引入组件views/template/alert.blade.php--}} 
  2.  @slot('title')    {{--指定替代组件中的$title位置--}} 
  3.   alert标题 
  4.  @endslot 
  5.  alert组件内容 
  6. @endcomponent 
  7. @component~@endcomponent之间的内容会自动替代组件{{$slot}},如果要指定替代的位置,可以通过@slot()~@endslot 

引入子视图:在一个页面中如果希望引入一个blade子视图,可以通过@include()

@include('template.child')

在blade中输出变量通过{{$var}},其中的语句已经经过 PHP 的 htmlentities 函数处理以避免 XSS 攻击,例如在controller中引入view时传入变量参数:

  1. public static function showBlade(){ 
  2.  return view('Login.login',['var'=>'test']); 

在blade中使用该变量

变量为:{{isset($var)? $var : '默认值'}}

有时候我们希望blade不要对文本进行解析,原样输出,比如在vue中也使用{{}}包裹变量,我们不希望blade对其进行编译,这时可以使用@:

原文本输出:@{{ $var }}

3、流程控制

blade提供了一套流程控制语句来对页面的渲染进行控制,使页面的渲染更为快捷,并且这些控制语句都是和PHP非常类似的。

if判断:

  1. @if ($val >80) 
  2.  优秀 
  3. @elseif ($val>60) 
  4.  及格 
  5. @else 
  6.  不及格 
  7. @endif 

循环:

  1. @for ($i = 0; $i < 10; $i++) 
  2.  The current value is {{ $i }} 
  3. @endfor 
  4.    
  5. @foreach ($users as $user
  6.  <p>This is user {{ $user->id }}</p> 
  7. @endforeach 

switch分支:

  1. @switch($i
  2.  @case(1) 
  3.   First case... 
  4.   @break 
  5.    
  6.  @case(2) 
  7.   Second case... 
  8.   @break 
  9.    
  10.  @default 
  11.   Default case... 
  12. @endswitch 

认证:@auth 和 @guest 指令可用于快速判断当前用户是否登录:

  1. @auth 
  2.  // 用户已登录... 
  3. @endauth 
  4.    
  5. @guest 
  6.  // 用户未登录... 
  7. @endguest

Tags: Laravel引擎渲染 blade

分享到: