Route::get('greeting', function () {
return view('welcome', ['name' => 'Samantha']);
你可以像這樣顯示 name
變數的內容:
Hello, {{ $name }}.
當然,也不是一定只能顯示傳遞至視圖的變數內容。你也可以顯示 PHP 函式的結果。實際上,你可以放置任何你需要的 PHP 程式碼到 Blade 顯示語法裡面:
目前的 UNIX 時間戳記為 {{ time() }}.
{tip} Blade 的 {{}}
語法已經自動以 PHP 的 htmlentites
函式防禦 XSS 攻擊。
顯示未跳脫的資料
在預設下,Blade {{ }}
語法會自己使用 PHP htmlspecialchars
原生函式來避免 XSS 攻擊。如果你不想要你的資料被跳脫處理,可以使用下面的語法。
Hello, {!! $name !!}.
{note} 當你的應用程式列印資料時,要特別小心由使用者提供的內容,最好使用跳脫的雙大括號語法來防止 XSS 攻擊。
渲染 JSON
有時候能會傳送一組陣列到你的視圖,目的是將陣列渲染成 JSON 來初始化 JavaScript 變數,例如:
<script>
var app = <?php echo json_encode($array); ?>;
</script>
你可以使用 @json Blade 指令:
<script>
var app = @json($array);
</script>
Blade & JavaScript 框架
由於許多 JavaScript 框架也使用「大」括號在瀏覽器中顯示給定的表達式,你可以使用 @
符號來告知 Blade 渲染引擎該表達式應該維持原樣。舉個例子:
<h1>Laravel</h1>
Hello, @{{ name }}.
在這個範例中,@
符號會被 Blade 移除。而且,Blade 引擎會保留 {{ name }}
表達式,如此一來便可讓其它 JavaScript 框架所應用。
@verbatim
指令
如果你的模板大部分要用來顯示 JavaScript 變數,你可以把 HTML 語法內容放到 @verbatim
,如此一來你就不用在每個 Blade echo 語句前加上 @
符號:
@verbatim
<div class="container">
Hello, {{ name }}.
@endverbatim
除了模板繼承與顯示資料功能以外,Blade 也提供了方便的縮寫給一般的 PHP 控制敘述,像是條件陳述式和迴圈。這些縮寫提供了乾淨、簡潔的方式來使用 PHP 的控制結構,同時還保留對應在 PHP 中熟悉且同樣的語法。
If 陳述式
你可以使用 @if
、@elseif
、@else
及 @endif
指令建構 if 陳述式。這些指令的功能等同於在 PHP 中的語法:
@if (count($records) === 1)
我有一條紀錄!
@elseif (count($records) > 1)
我有多條紀錄!
@else
我沒有任何記錄!
@endif
為了方便,Blade 也提供了 @unless
指令:
@unless (Auth::check())
You are not signed in.
@endunless
除了上面已經討論過的指令外,@isset
和 @empty
對於 PHP 原生函式提供更優雅的方法:
@isset($records)
// $records is defined and is not null...
@endisset
@empty($records)
// $records is "empty"...
@endempty
優雅的認證寫法
@auth
和 @guest
可以用來快速確認當前使用者是否被認證或是未授權的訪客:
@auth
// 使用者已經被認證...
@endauth
@guest
// 使用者尚未被認證...
@endguest
如果有需要,當你使用 @auth
和 @guest
指令時,你可以指定認證守衛來確認身份:
@auth('admin')
// 使用者已經被認證...
@endauth
@guest('admin')
// 使用者尚未被認證...
@endguest
Switch 陳述式
可以使用 @switch
、@case
、@break
、@default
和 @endswitch
來建構 Switch 語法:
@switch($i)
@case(1)
First case...
@break
@case(2)
Second case...
@break
@default
Default case...
@endswitch
除了條件句外,Blade 支援原生 PHP 迴圈的語法。再說一次,這些指令都能對應到原生 PHP 功能:
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
@while (true)
<p>I'm looping forever.</p>
@endwhile
{tip} 正在執行迴圈時,你可以使用迴圈變數來取得迴圈的訊息。例如你想知道目前是在迴圈的第一次還是最後一次。
正在使用迴圈的時候,你也可以終止或略過當前的迭代:
@foreach ($users as $user)
@if ($user->type == 1)
@continue
@endif
<li>{{ $user->name }}</li>
@if ($user->number == 5)
@break
@endif
@endforeach
你也可以在迴圈裡放入條件句:
@foreach ($users as $user)
@continue($user->type == 1)
<li>{{ $user->name }}</li>
@break($user->number == 5)
@endforeach
正在執行迴圈時,可以在迴圈內使用 $loop
。這個變數提供存取一些有用的資訊,像是目前迴圈索引以及當前迴圈是第一次還是最後一次迭代:
@foreach ($users as $user)
@if ($loop->first)
This is the first iteration.
@endif
@if ($loop->last)
This is the last iteration.
@endif
<p>This is user {{ $user->id }}</p>
@endforeach
如果你使用一個巢狀迴圈,你可以透過 parent
屬性去存取 $loop
變數:
@foreach ($users as $user)
@foreach ($user->posts as $post)
@if ($loop->parent->first)
This is first iteration of the parent loop.
@endif
@endforeach
@endforeach
$loop
也包含了其他有用的屬性:
Blade 允許你在你的視圖中寫註解。然而,這不像 HTML 的註解。Blade 註解不是寫入 HTML 並返回到你的網頁上:
{{-- 這裡的註解不會出現再渲染後的 HTML --}}
在一些情況下,你會想在視圖上直接寫 PHP 程式碼。你能使用 @php
這個Blade 指令在你的模板中執行 PHP :
@endphp