介紹
首先我理解的模板就是封裝一些特殊的語法結構來完成特定的功能,模板可以轉化成原生的php程式碼,Blade模板就是這樣的一套模板引擎,它具有語法簡單而且容易擴充套件的特點,而且Blade語法都被編譯成正常的PHP程式碼並快取,所以它的速度很快,並且允許在Blade檔案中使用原生PHP程式碼(如果需要), 還有其它的模板引擎如Twig
Blade 模板檔案使用 .blade.php
作為副檔名,被存放在 resources/views
目錄
Blade 檢視可以使用全域性 view
函式從 Route 或控制器返回,可以使用 view 函式的第二個引數將資料傳遞到 Blade 檢視
Route::get('/', function () {
return view('welcome', ['name' => 'zstartw']);
});
也可以使用下面這個方法
Route::get('/', function () {
return view('welcome')->with('name', 'zstartw');
});
看了一下原始碼,原來View是一個介面, 有下面三個方法,所以這裡可以呼叫到with方法
interface View extends Renderable
{
/**
* Get the name of the view.
*
* @return string
*/
public function name();
/**
* Add a piece of data to the view.
*
* @param string|array $key
* @param mixed $value
* @return $this
*/
public function with($key, $value = null);
/**
* Get the array of view data.
*
* @return array
*/
public function getData();
}
輸出資料
使用的是echo語法 {{ }}
, 它用於包含PHP中輸出部分的內容。{{$variable}}
與普通PHP中的<?php echo htmlentities($variable) ?>
, <?=htmlentities($variable)?>
類似。Blade在預設情況下會使用PHP的htmlentities()來轉義所有輸出資訊,以保護使用者免受惡意指令碼插入的攻擊, 如果你想進行沒有轉義的輸出,則可以使用{!!和!!}
實現。
渲染 JSON
有這種場景,目前我還沒有遇到,陣列傳遞給檢視,以將其呈現為 JSON,以便初始化 JavaScript 變數,這個時候就可以使用下面方法
<script>
var app = <?php echo json_encode($array); ?>;
</script>
或者,您可以使用 Illuminate\Support\Js::from 方法指令
<script>
var app = {{ Illuminate\Support\Js::from($array) }};
</script>
最新版本可以使用Js
<script>
var app = {{ Js::from($array) }};
</script>
Blade指令
這也是blade模板的一個優勢,提供很多方便的指令:
if語句
注意要帶上@endif
, 不然會報語法錯誤 syntax error, unexpected end of file
@if (count($records) === 1)
// 有一條記錄
@elseif (count($records) > 1)
// 有多條記錄
@else
// 沒有記錄
@endif
為了方便, Blade 還提供了一個 @unless 指令:
@unless (Auth::check())
// 還沒有登入
@endunless
相當於 @if (! Auth::check()) @endif
授權指令
@auth
和 @guest
指令可用於快速判斷當前使用者是否已經獲得 授權或是遊客, 這也是個很方便的指令
@auth
// 使用者已經透過認證……
@endauth
@guest
// 使用者沒有透過認證……
@endguest
如有需要,您亦可在使用 @auth
和 @guest
指令時指定 鑑權守衛, 這個後面在專案裡面試一下
@auth('admin')
// 使用者已經透過認證...
@endauth
@guest('admin')
// 使用者沒有透過認證...
@endguest
迴圈
用的多的是foreach, 在遍歷 foreach 迴圈時,迴圈內部可以使用 $loop 變數, 可以使用這個方便判斷是第一個還是最後一個
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
嵌入原生的php程式碼
@php
$counter = 1;
@endphp
元件
建立的元件會在resources/views/components 目錄中, 在為自己的應用程式編寫元件時,會在 app/View/Components 目錄和 resources/views/components 目錄中自動發現元件,因此通常不需要進一步的元件註冊。Blade 元件以 x-
字串開始
本作品採用《CC 協議》,轉載必須註明作者和本文連結