<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 基礎 —— Blade 模板引擎 ## 1、簡介 Blade中并不約束你使用PHP原生代碼。所有的Blade視圖都會被編譯成原生PHP代碼并緩存起來直到被修改,這意味著對應用的性能而言Blade基本上是零開銷。Blade視圖文件使用`.blade.php`文件擴展并存放在`resources/views`目錄下。 ## 2、模板繼承 ### 2.1 定義布局 使用Blade的兩個最大優點是模板繼承和切片,開始之前讓我們先看一個例子。首先,我們檢測一個“主”頁面布局,由于大多數web應用在不同頁面中使用同一個布局,可以很方便的將這個布局定義為一個單獨的Blade頁面: ~~~ <!-- 存放在 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> ~~~ 正如你所看到的,該文件包含典型的HTML標記,然而,注意`@section`和`@yield`指令,前者正如其名字所暗示的,定義了一個內容的片段,而后者用于顯示給定片段的內容。 現在我們已經為應用定義了一個布局,接下來讓我們定義繼承該布局的子頁面吧。 ### 2.2 擴展布局 定義子頁面的時候,可以使用Blade的`@extends`指令來指定子頁面所繼承的布局,繼承一個Blade布局的視圖將會使用`@section`指令注入內容到布局的片段中,記住,如上面例子所示,這些片段的內容將會顯示在布局中使用`@yield`的地方: ~~~ <!-- 存放在 resources/views/layouts/child.blade.php --> @extends('layouts.master') @section('title', 'Page Title') @section('sidebar') @parent <p>This is appended to the master sidebar.</p> @endsection @section('content') <p>This is my body content.</p> @endsection ~~~ 在本例中,sidebar片段使用`@parent`指令來追加(而非覆蓋)內容到布局中sidebar,`@parent`指令在視圖渲染時將會被布局中的內容替換。 當然,和原生PHP視圖一樣,Blade視圖可以通過`view`方法直接從路由中返回: ~~~ Route::get('blade', function () { return view('child'); }); ~~~ ## 3、數據顯示 可以通過兩個花括號包裹變量來顯示傳遞到視圖的數據,比如,如果給出如下路由: ~~~ Route::get('greeting', function () { return view('welcome', ['name' => 'Samantha']); }); ~~~ 那么可以通過如下方式顯示`name`變量的內容: ~~~ Hello, {{ $name }}. ~~~ 當然,不限制顯示到視圖中的變量內容,你還可以輸出任何PHP函數,實際上,可以將任何PHP代碼放到Blade模板語句中: ~~~ The current UNIX timestamp is {{ time() }}. ~~~ 注意:Blade的`{{}}`語句已經經過PHP的`htmlentities`函數處理以避免XSS攻擊。 **Blade & JavaScript框架** 由于很多JavaScript框架也是用花括號來表示要顯示在瀏覽器中的表達式,可以使用@符號來告訴Blade渲染引擎該表達式應該保持原生格式不作改動。比如: ~~~ <h1>Laravel</h1> Hello, @{{ name }}. ~~~ 在本例中,`@`符將會被Blade移除,然而,`{{?name?}}`表達式將會保持不變,避免被JavaScript框架渲染。 **輸出存在的數據** 有時候你想要輸出一個變量,但是不確定該變量是否被設置,我們可以通過如下PHP代碼: ~~~ {{ isset($name) ? $name : 'Default' }} ~~~ 除了使用三元運算符,Blade還提供了更簡單的方式: ~~~ {{ $name or 'Default' }} ~~~ 在本例中,如果`$name`變量存在,其值將會顯示,否則將會顯示“Default”。 **顯示原生數據** 默認情況下,Blade的`{{?}}`語句已經通過PHP的`htmlentities`函數處理以避免XSS攻擊,如果你不想要數據被處理,可以使用如下語法: ~~~ Hello, {!! $name !!}. ~~~ 注意:輸出用戶提供的內容時要當心,對用戶提供的內容總是要使用雙花括號包裹以避免直接輸出HTML代碼。 ## 4、流程控制 除了模板繼承和數據顯示之外,Blade還為常用的PHP流程控制提供了便利操作,比如條件語句和循環,這些快捷操作提供了一個干凈、簡單的方式來處理PHP的流程控制,同時保持和PHP相應語句的相似。 ### 4.1 If語句 可以使用`@if`,?`@elseif`,?`@else`, 和?`@endif`來構造if語句,這些指令函數和PHP的相同: ~~~ @if (count($records) === 1) I have one record! @elseif (count($records) > 1) I have multiple records! @else I don't have any records! @endif ~~~ 為方便起見,Blade還提供了`@unless`指令: ~~~ @unless (Auth::check()) You are not signed in. @endunless ~~~ ### 4.2 循環 除了條件語句,Blade還提供了簡單指令處理PHP支持的循環結構,同樣,這些指令函數和PHP的一樣: ~~~ @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 ~~~ ### 4.3 包含子視圖 Blade的`@include`指令允許你很簡單的在一個視圖中包含另一個Blade視圖,所有父級視圖中變量在被包含的子視圖中依然有效: ~~~ <div> @include('shared.errors') <form> <!-- Form Contents --> </form> </div> ~~~ 盡管被包含的視圖繼承所有父視圖中的數據,你還可以傳遞額外參數到被包含的視圖: ~~~ @include('view.name', ['some' => 'data']) ~~~ ### 4.4?注釋 Blade還允許你在視圖中定義注釋,然而,不同于HTML注釋,Blade注釋并不會包含到HTML中被返回: ~~~ {{-- This comment will not be present in the rendered HTML --}} ~~~ ## 5、服務注入 `@inject`指令可以用于從[服務容器](http://laravelacademy.org/post/93.html)中獲取服務,傳遞給`@inject`的第一個參數是服務將要被放置到的變量名,第二個參數是要解析的服務類名或接口名: ~~~ @inject('metrics', 'App\Services\MetricsService') <div> Monthly Revenue: {{ $metrics->monthlyRevenue() }}. </div> ~~~ ## 6、擴展Blade Blade甚至還允許你自定義指令,可以使用`directive`方法來注冊一個指令。當Blade編譯器遇到該指令,將會傳入參數并調用提供的回調。 下面的例子創建了一個`@datetime($var)`指令: ~~~ <?php namespace App\Providers; use Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. * * @return void */ public function boot() { Blade::directive('datetime', function($expression) { return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>"; }); } /** * 在容器中注冊綁定. * * @return void */ public function register() { // } } ~~~ 正如你所看到的,Laravel的幫助函數`with`被用在該指令中,`with`方法簡單返回給定的對象/值,允許方法鏈。最終該指令生成的PHP代碼如下: ~~~ <?php echo with($var)->format('m/d/Y H:i'); ?> ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看