W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Blade 是 Laravel 所提供的一個(gè)簡單卻又非常強(qiáng)大的模板引擎。不像控制器頁面布局,Blade 是使用 模板繼承(template inheritance) 和 區(qū)塊(sections)。所有的 Blade 模板后綴名都要命名為 .blade.php
。
<!-- 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>
@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')
Hello, {{ $name }}.The current UNIX timestamp is {{ time() }}.
有時(shí)候您想要打印一個(gè)變量,但您不確定這個(gè)變量是否存在,通常情況下,您會(huì)想要這樣寫::
{{ isset($name) ? $name : 'Default' }}然而,除了寫這種三元運(yùn)算符語法之外,Blade 讓您可以使用下面這種更簡便的語法:{{ $name or 'Default' }}
如果您需要顯示的一個(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 (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')
您也可以通過傳入數(shù)組的形式將數(shù)據(jù)傳遞給加載的子視圖:
@include('view.name', ['some' => 'data'])
如果想要重寫掉前面區(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 --}}
Blade 甚至允許你定義自己的控制語法結(jié)構(gòu)。 當(dāng)一個(gè) Blade 文件被編譯時(shí), 每一個(gè)自定義的擴(kuò)展語法會(huì)與視圖內(nèi)容一起被調(diào)用, 您可以做任何的操作, 簡單如 str_replace
以及更為復(fù)雜的正則表達(dá)式。
Blade 的編譯器帶有一些輔助方法 createMatcher
及 createPlainMatcher
,這些輔助方法可以產(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);});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: