模板

Blade 模板

Blade 是 Laravel 所提供的一個簡單卻又非常強大的模板引擎。不像控制器頁面佈局,Blade 是使用 模板繼承( template inheritance )和 區塊( sections )。所有的 Blade 模板命名都要以 .blade.php 結尾。

定義一個 Blade 頁面佈局

<!-- Stored in resources/views/layouts/master.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>

使用 Blade 頁面佈局

@extends('layouts.master')

@section('title', 'Page Title')

@section('sidebar')
    @parent

    <p>This is appended to the master sidebar.</p>
@stop

@section('content')
    <p>This is my body content.</p>
@stop

請注意,extend Blade 頁面佈局的視圖,只是覆寫頁面佈局中定義的 section。如果在繼承的頁面裡,想顯示原本頁面佈局中 section 裡的內容,那就要在 section 中使用 @parent 語法,把內容附加到頁面佈局中,像是側邊欄區塊或者頁尾區塊。

在某些時候,像是不確定 section 有沒有被定義,你可能會想要傳一個預設的值給 @yield。可以傳入第二個參數作為預設值:

@yield('section', 'Default Content')

其他 Blade 控制語法結構

印出資料

Hello, {{ $name }}.

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

確認資料存在才印出

有時候您想要印出一個變數,但您不確定這個變數是否存在,基本上,你會想要這樣做:

{{ isset($name) ? $name : 'Default' }}

然而,比起使用三元運算子,Blade 讓您可以使用下面這種更簡便的語法:

{{ $name or 'Default' }}

使用大括號顯示文字

如果需要顯示一個被大括號包起來的字串,您可以在大括號之前加上 @ 符號跳脫 Blade 的解析:

@{{ This will not be processed by Blade }}

如果您不想資料被轉義, 也可以使用如下語法:

Hello, {!! $name !!}.

注意: 在應用程式裡印出使用者所提供的內容時要非常小心。請記得永遠使用雙重大括號來轉義內容中的 HTML 字碼。

If 語法

@if (count($records) === 1)
    I have one record!
@elseif (count($records) > 1)
    I have multiple records!
@else
    I don't have any records!
@endif

@unless (Auth::check())
    You are not signed in.
@endunless

迴圈

@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

載入子視圖

@include('view.name')

您也可以傳入陣列資料傳遞到載入的子視圖:

@include('view.name', ['some' => 'data'])

覆寫區塊

如果想要重寫掉前面區塊中的內容,您可以使用 overwrite 語法:

@extends('list.item.container')

@section('list.item.content')
    <p>This is an item of type {{ $item->type }}</p>
@overwrite

顯示語言行

@lang('language.line')

@choice('language.line', 1)

註釋

{{-- This comment will not be in the rendered HTML --}}