模板

2018-12-17 10:55 更新

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>
    <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

           

請(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 視圖中打印(Echoing)數(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);});


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)