鍍金池/ 教程/ PHP/ 模板
Laravel Cashier
Eloquent ORM
HTTP 響應(yīng)
發(fā)行說明
擴(kuò)展包開發(fā)
HTTP 控制器
事件
擴(kuò)展框架
Contracts
開發(fā)
配置
表單驗(yàn)證
錯(cuò)誤與日志
Hashing
貢獻(xiàn)指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構(gòu)造器
Redis
升級(jí)向?qū)?/span>
概覽
緩存
服務(wù)提供者
Envoy 任務(wù)執(zhí)行器
隊(duì)列
單元測(cè)試
服務(wù)容器
文件系統(tǒng) / 云存儲(chǔ)
認(rèn)證
請(qǐng)求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁
輔助方法
應(yīng)用程序結(jié)構(gòu)
HTTP 路由
HTTP 請(qǐng)求
基本用法
本地化
HTTP 中間件
結(jié)構(gòu)生成器
Facades
Laravel Elixir

模板

Blade 模板

Blade 是 Laravel 所提供的一個(gè)簡單卻又非常強(qiáng)大的模板引擎。不像控制器頁面布局,Blade 是使用模板繼承(template inheritance) 和區(qū)塊(sections)。所有的 Blade 模板后綴名都要命名為.blade.php

定義一個(gè) Blade 頁面布局

<!-- Stored in resources/views/layouts/master.blade.php -->

<html>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

在視圖模板中使用 Blade 頁面布局

@extends('layouts.master')

@section('sidebar')
    @@parent

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

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

請(qǐng)注意 如果視圖繼承(extend) 了一個(gè) Blade 頁面布局會(huì)將頁面布局中定義的區(qū)塊用視圖的所定義的區(qū)塊重寫。如果想要將頁面布局中的區(qū)塊內(nèi)容也能在繼承此布局的視圖中呈現(xiàn),那就要在區(qū)塊中使用@@parent 語法指令,通過這種方式可以把內(nèi)容附加到頁面布局中,我們會(huì)在側(cè)邊欄區(qū)塊或者頁腳區(qū)塊看到類似的使用。

有時(shí)候,如您不確定這個(gè)區(qū)塊內(nèi)容有沒有被定義,您可能會(huì)想要傳一個(gè)默認(rèn)的值給 @yield。您可以傳入第二個(gè)參數(shù)作為默認(rèn)值給 @yield:

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

其他 Blade 控制語法結(jié)構(gòu)

在 Blade 視圖中打?。‥choing)數(shù)據(jù)

Hello, {{ $name }}.

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

檢查數(shù)據(jù)是否存在后再打印數(shù)據(jù)

有時(shí)候您想要打印一個(gè)變量,但您不確定這個(gè)變量是否存在,通常情況下,您會(huì)想要這樣寫::

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

然而,除了寫這種三元運(yùn)算符語法之外,Blade 讓您可以使用下面這種更簡便的語法:

{{ $name or 'Default' }}

使用花括號(hào)顯示文字

如果您需要顯示的一個(gè)字符串剛好被花括號(hào)包起來,您可以在花括號(hào)之前加上 @ 符號(hào)前綴來跳出 Blade 引擎的解析:

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

如果您不想數(shù)據(jù)被轉(zhuǎn)義, 也可以使用如下語法:

Hello, {!! $name !!}.

特別注意: 在您的應(yīng)用程序打印用戶所提供的內(nèi)容時(shí)要非常小心。請(qǐng)記得永遠(yuǎn)使用雙重花括號(hào)來轉(zhuǎn)義內(nèi)容中的 HTML 實(shí)體字符串。

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

循環(huán)

@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')

您也可以通過傳入數(shù)組的形式將數(shù)據(jù)傳遞給加載的子視圖:

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

重寫區(qū)塊

如果想要重寫掉前面區(qū)塊中的內(nèi)容,您可以使用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 --}}

擴(kuò)展 Blade

Blade 甚至允許你定義自己的控制語法結(jié)構(gòu)。 當(dāng)一個(gè) Blade 文件被編譯時(shí), 每一個(gè)自定義的擴(kuò)展語法會(huì)與視圖內(nèi)容一起被調(diào)用, 您可以做任何的操作, 簡單如str_replace 以及更為復(fù)雜的正則表達(dá)式。

Blade 的編譯器帶有一些輔助方法createMatchercreatePlainMatcher,這些輔助方法可以產(chǎn)生您需要的表達(dá)式來幫助您構(gòu)建自己的自定義擴(kuò)展語法。

其中createPlainMatcher 方法是用在沒有參數(shù)的語法指令如@endif@stop 等, 而createMatcher 方法是用在帶參數(shù)的語法指令中。

下面的例子創(chuàng)建了一個(gè)@datetime($var) 語法命令, 這個(gè)命令只是簡單的對(duì)$var 調(diào)用->format() 方法:

Blade::extend(function($view, $compiler)
{
    $pattern = $compiler->createOpenMatcher('datetime');

    return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\')); ?>', $view);
});