laravel提供了blade模板引擎用于視圖的渲染,在blade中可以直接使用PHP代碼,并且blade最終也會被編譯為php緩存起來,只有在blade文件被修改后才會重新編譯,這一點可以節省開銷提高應用性能。blade文件.blade.php作為視圖文件存放于laravel的resource/views目錄下。
1、定義模板
blade定義模板頁面同創建html頁面一樣,只不過在適當的位置通過@section或@yield來占位,當其它頁面引用模板頁時將內容填充到占位的位置即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<html> <head> <title>@yield( 'title' )</title> </head> <body> <header class = "header" > @section( 'header' ) 這是頭部<br> @show </header> <div class = "middle" > <aside class = "aside" > 這是側邊欄 @yield( 'aside' ) </aside> <div class = "content" > @section( 'content' ) 這是主體內容 @show </div> </div> <footer class = "footer" > 這是底部 @yield( 'footer' ) </footer> </body> </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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@ extends ( 'template.layout' ) {{--引入模板views/template/layout.blade.php--}} @section( 'title' ) 登錄界面 @stop @section( 'header' ) {{--填充到header對應的占位符--}} @parent {{--保留模板原內容--}} 頭部替換內容 @stop |
引入組件:通過@component來引入組件模板。比如定義了一個通用的錯誤提示組件alert:
1
2
3
4
|
<div style= "color: #ff5b5d;" > <h5>{{ $title }}</h5> {{ $slot }} </div> |
在頁面中使用該組件:
1
2
3
4
5
6
|
@component( 'template.alert' ) {{--引入組件views/template/alert.blade.php--}} @slot( 'title' ) {{--指定替代組件中的 $title 位置--}} alert標題 @endslot alert組件內容 @endcomponent |
@component~@endcomponent之間的內容會自動替代組件{{$slot}},如果要指定替代的位置,可以通過@slot()~@endslot
引入子視圖:在一個頁面中如果希望引入一個blade子視圖,可以通過@include()
1
|
@ include ( 'template.child' ) |
在blade中輸出變量通過{{$var}},其中的語句已經經過 PHP 的 htmlentities 函數處理以避免 XSS 攻擊。例如在controller中引入view時傳入變量參數:
1
2
3
|
public static function showBlade(){ return view( 'Login.login' ,[ 'var' => 'test' ]); } |
在blade中使用該變量
變量為:{{isset($var)? $var : '默認值'}}
有時候我們希望blade不要對文本進行解析,原樣輸出,比如在vue中也使用{{}}包裹變量,我們不希望blade對其進行編譯,這時可以使用@:
原文本輸出:@{{ $var }}
3、流程控制
blade提供了一套流程控制語句來對頁面的渲染進行控制,使頁面的渲染更為快捷,并且這些控制語句都是和PHP非常類似的。
if判斷:
1
2
3
4
5
6
7
|
@ if ( $val >80) 優秀 @ elseif ( $val >60) 及格 @ else 不及格 @ endif |
循環:
1
2
3
4
5
6
7
|
@ for ( $i = 0; $i < 10; $i ++) The current value is {{ $i }} @ endfor @ foreach ( $users as $user ) <p>This is user {{ $user ->id }}</p> @ endforeach |
switch分支:
1
2
3
4
5
6
7
8
9
10
11
12
|
@ switch ( $i ) @ case (1) First case ... @ break @ case (2) Second case ... @ break @ default Default case ... @ endswitch |
認證:@auth 和 @guest 指令可用于快速判斷當前用戶是否登錄:
1
2
3
4
5
6
7
|
@auth // 用戶已登錄... @endauth @guest // 用戶未登錄... @endguest |
以上這篇Laravel實現通過blade模板引擎渲染視圖就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/theVicTory/article/details/80255746