首頁 >php框架 >Laravel >Blade模板是什麼?

Blade模板是什麼?

coldplay.xixi
coldplay.xixi原創
2020-07-02 10:55:483330瀏覽

Blade模板是是Laravel提供的模板引擎,它簡單強大,Blade允許在視圖中使用原生PHP代碼,Lar​​avel使用的是編譯後的緩存文件,而不是視圖本身,所以Blade對於應用程式來說是零開銷。

Blade模板是什麼?

Blade模板是:

Blade 是 Laravel 提供的模板引擎,它簡單又強大。不像其他的 PHP 模板引擎,Blade 允許在視圖中使用原生 PHP 程式碼。

實際上,所有的 Blade 視圖最終都會被編譯成原生 PHP 程式碼,快取在 storage/framework/views 資料夾中。

Laravel 使用的是這些編譯後的快取文件,而不是視圖本身,所以,Blade 對於應用程式來說是零開銷的。當你修改了視圖文件,那麼它會重新編譯並緩存,以便使用。 Blade 視圖以 blade.php 為後綴名,一般存放於 resources/views 資料夾中。

範本繼承:

1、定義版面檔案

Blade 範本引擎的主要兩個優點是「範本繼承” 和“區塊”。舉一個簡單的例子,一個專案裡,幾乎所有的頁面都是一樣的佈局,這時候就可以把這個佈局提煉出來,作為母版頁,繼承了這個母版頁的的頁面都有一樣的佈局效果,成為母版頁的子頁。母版頁也叫佈局文件,佈局文件就是一個 Blade 視圖:

<!-- Stored in resources/views/layouts/app.blade.php -->
<html>
       <head>
             <title>App Name - @yield(&#39;title&#39;)</title>
       </head>
       <body>
         @section(&#39;sidebar&#39;)
               This is the master sidebar.
         @show
         <div class="container">
              @yield(&#39;content&#39;)
         </div>
       <body>
</html>

佈局文件裡除了基礎的 HTNL 標籤,還使用了兩個指令:@section 和 @yield 。 @section定義區塊,@yield 定義區塊裡的內容。

下面。來定義佈局文件的子頁。

2、繼承佈局文件

子頁中,使用Blade 的@extends 指令指定「繼承」 的佈局文件,使用@section 指令為在佈局文件中使用@section 和@yield 指令的地方注入內容:

<!-- Stored in resources/views/child.blade.php -->
@extends(&#39;layouts.app&#39;)
@section(&#39;title&#39;,&#39;Page Title&#39;)
@section(&#39;sidebar&#39;)
       <p> This is appended to the master sideebar</p>
@endsection
@section(&#39;content&#39;)
         <p>This ismy body content. </p>
@endsection

可以看到,在佈局文件中使用@yield 指令的地方,在子頁中仍然使用@section 注入內容;在佈局文件中使用@section 指令定義的一個好處是:在子頁中使用@section 注入時,可以使用@parent 指令附加(而非重寫)在佈局文件中的內容,而在佈局文件中使用@yield 指令定義的地方是做不到的。 @parent 指令會在視圖渲染的時替換成佈局檔案裡的內容。

注意,與在檔案佈局中定義的 sidebar 不同的是,子頁裡使用 @endsection 結束,而不是 @show 。因為 @endsection 僅用來定義區塊,而 @show 是用來定義、立刻產出區塊的。

從路由直接傳回視圖文件,要用到全域輔助函數helper :

Route::get(&#39;blade&#39;, function(){
        return view(&#39;child&#39;);
})

3、元件&插槽

元件和插槽提供了類似佈局和區塊的優點。而組件和插槽的心智模型更符合直覺。設想一下,在我們的專案中有一個可重複的 「彈框」 元件:

<!-- Stored resource/views/alter.blade.php -->
<div class="alter alter-danger">
       {{ $slot }}
</div>

#{{ $slot }} 表示插入組成的內容。建立此元件,是使用Blade 的@component指令:

@component(&#39;alter&#39;)
        <strong>Whoops!</strong> Something went wrong!
@endcomponent

在這個場景裡,{{ $slot }} 變數的內容是:

<strong>Whoops! </strong> Something went wrong!

有時一個組件需要多個插槽。這時,只需要稍改組件代碼,定義一個 “標題” 插槽,這個插槽稱命名插槽。命名插槽是透過簡單的 “列印” 匹配其名稱的變數來顯示內容的:

<!-- Stored resources/views/alter.blade.php-->
<div class="alter alter-danger">
         <div class="alter-title">{{ $title }}</div>
            {{ $slot }}
</div>

為名名插槽注入內容,使用 @slot 指令。所有不在 @slot 指令裡的內容都會傳遞給元件裡的 $slot 變數。

@compontent (&#39;alter&#39;)
         @slot(&#39;title&#39;)
            Forbidden
         @endslot
     You are not allowed to access this resource!
@edcompontent~

4、為組成傳遞額外資料:

有時需要為組成件遞額外資料。為此,可以為 @conponent 指令傳遞第二個陣列參數。指定要傳遞的額外。根據所有過去的額外數據作為變量,在組件模板裡都可以取的:

@component
     <compontent(&#39;alter&#39;, [&#39;foo&#39; => &#39;bar&#39;);
         .....
@endCompontent

5、顯示數據

向Blade 視圖傳遞數據,是透過將變數包裹在 [ ] 裡實現的:

Route::get(&#39;greeting&#39;, function(){
         return view(&#39;welcome&#39;, [ &#39;name&#39; => &#39;&#39;Samantha&#39;]);
})

下面就可以使用name 變數顯示內容了:

Hello! {{ $name }}

{{ }} 是Blade 視圖的列印語句,當然,列印語句裡不限制只能列印變數內容,也可以使用PHP 函數。實際上,列印語句這裡可以使用任何PHP 程式碼:

The current UNIX timestamp is {{ time() }}

6、顯示非轉移資料

默認,所有傳遞給Blade {{ }} 語句的內容都會使用 htmlspecialchar 函數處理、將內容轉義,避免XSS 攻擊。如果不需要轉義輸出的內容,可以使用下面語法:

Hello! {{!! $name !!}}.

不過千萬要小心,應該優先選擇使用轉義的 {{ }} 語法避免 XXS 攻擊。因為,有時你很難避免使用者有意的、無意的資料輸入。

相關學習推薦:Laravel

#

以上是Blade模板是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn