模板
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 --}}