Blade模板是什麼?
Blade模板是是Laravel提供的模板引擎,它簡單強大,Blade允許在視圖中使用原生PHP代碼,Laravel使用的是編譯後的緩存文件,而不是視圖本身,所以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('title')</title> </head> <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> <body> </html>
佈局文件裡除了基礎的 HTNL 標籤,還使用了兩個指令:@section 和 @yield 。 @section定義區塊,@yield 定義區塊裡的內容。
下面。來定義佈局文件的子頁。
2、繼承佈局文件
子頁中,使用Blade 的@extends 指令指定「繼承」 的佈局文件,使用@section 指令為在佈局文件中使用@section 和@yield 指令的地方注入內容:
<!-- Stored in resources/views/child.blade.php --> @extends('layouts.app') @section('title','Page Title') @section('sidebar') <p> This is appended to the master sideebar</p> @endsection @section('content') <p>This ismy body content. </p> @endsection
可以看到,在佈局文件中使用@yield 指令的地方,在子頁中仍然使用@section 注入內容;在佈局文件中使用@section 指令定義的一個好處是:在子頁中使用@section 注入時,可以使用@parent 指令附加(而非重寫)在佈局文件中的內容,而在佈局文件中使用@yield 指令定義的地方是做不到的。 @parent 指令會在視圖渲染的時替換成佈局檔案裡的內容。
注意,與在檔案佈局中定義的 sidebar 不同的是,子頁裡使用 @endsection 結束,而不是 @show 。因為 @endsection 僅用來定義區塊,而 @show 是用來定義、立刻產出區塊的。
從路由直接傳回視圖文件,要用到全域輔助函數helper :
Route::get('blade', function(){ return view('child'); })
3、元件&插槽
元件和插槽提供了類似佈局和區塊的優點。而組件和插槽的心智模型更符合直覺。設想一下,在我們的專案中有一個可重複的 「彈框」 元件:
<!-- Stored resource/views/alter.blade.php --> <div class="alter alter-danger"> {{ $slot }} </div>
#{{ $slot }}
表示插入組成的內容。建立此元件,是使用Blade 的@component指令:
@component('alter') <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 ('alter') @slot('title') Forbidden @endslot You are not allowed to access this resource! @edcompontent~
4、為組成傳遞額外資料:
有時需要為組成件遞額外資料。為此,可以為 @conponent 指令傳遞第二個陣列參數。指定要傳遞的額外。根據所有過去的額外數據作為變量,在組件模板裡都可以取的:
@component <compontent('alter', ['foo' => 'bar'); ..... @endCompontent
5、顯示數據
向Blade 視圖傳遞數據,是透過將變數包裹在 [ ]
裡實現的:
Route::get('greeting', function(){ return view('welcome', [ 'name' => ''Samantha']); })
下面就可以使用name 變數顯示內容了:
Hello! {{ $name }}
{{ }}
是Blade 視圖的列印語句,當然,列印語句裡不限制只能列印變數內容,也可以使用PHP 函數。實際上,列印語句這裡可以使用任何PHP 程式碼:
The current UNIX timestamp is {{ time() }}
6、顯示非轉移資料
默認,所有傳遞給Blade {{ }}
語句的內容都會使用 htmlspecialchar
函數處理、將內容轉義,避免XSS 攻擊。如果不需要轉義輸出的內容,可以使用下面語法:
Hello! {{!! $name !!}}.
不過千萬要小心,應該優先選擇使用轉義的 {{ }}
語法避免 XXS 攻擊。因為,有時你很難避免使用者有意的、無意的資料輸入。
#相關學習推薦:Laravel
以上是Blade模板是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel - Artisan 指令 - Laravel 5.7 提供了處理和測試新指令的新方法。它包括測試 artisan 命令的新功能,下面提到了演示?

Laravel - Artisan Console - Laravel 框架提供了三種主要的命令列互動工具,分別是:Artisan、Ticker 和 REPL。本章詳細介紹了 Artisan。

Laravel - 分頁自訂 - Laravel 包含分頁功能,可協助使用者或開發人員包含分頁功能。 Laravel 分頁器與查詢產生器和 Eloquent ORM 整合。自動分頁方法

Laravel郵件發送失敗時的退信代碼獲取方法在使用Laravel開發應用時,經常會遇到需要發送驗證碼的情況。而在實�...

Laravel計劃任務運行無響應排查在使用Laravel的計劃任務調度時,不少開發者會遇到這樣的問題:schedule:run...

在dcatadmin(laravel-admin)中如何實現自定義點擊添加數據的表格功能在使用dcat...

Laravel - 轉儲伺服器 - Laravel 轉儲伺服器隨 Laravel 5.7 版本提供。先前的版本不包括任何轉儲伺服器。轉儲伺服器將成為 laravel/laravel Composer 檔案中的開發依賴項。
