Laravel 學習筆記二: Blade模板

zstartw發表於2022-07-31

介紹

首先我理解的模板就是封裝一些特殊的語法結構來完成特定的功能,模板可以轉化成原生的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 協議》,轉載必須註明作者和本文連結
君子博學而日參省乎己,則知明而行無過矣

相關文章