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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                <article><h1>Laravel 的 Blade 模板引擎</h1><ul><li><a href="#introduction">簡介</a></li><li><a href="#template-inheritance">模板繼承</a><ul><li><a href="#defining-a-layout">定義頁面布局</a></li><li><a href="#extending-a-layout">繼承頁面布局</a></li></ul></li><li><a href="#components-and-slots">組件 &amp; Slots</a></li><li><a href="#displaying-data">顯示數據</a><ul><li><a href="#blade-and-javascript-frameworks">Blade &amp; JavaScript 框架</a></li></ul></li><li><a href="#control-structures">控制結構</a><ul><li><a href="#if-statements">If 語句</a></li><li><a href="#loops">循環</a></li><li><a href="#the-loop-variable">循環變量</a></li><li><a href="#comments">注釋</a></li><li><a href="#php">PHP</a></li></ul></li><li><a href="#including-sub-views">引入子視圖</a><ul><li><a href="#rendering-views-for-collections">為集合渲染視圖</a></li></ul></li><li><a href="#stacks">堆棧</a></li><li><a href="#service-injection">服務注入</a></li><li><a href="#extending-blade">擴充 Blade</a></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">簡介</a></h2><p>Blade 是 Laravel 提供的一個既簡單又強大的模板引擎。和其他流行的 PHP 模板引擎不一樣,Blade 并不限制你在視圖中使用原生 PHP 代碼。所有 Blade 視圖文件都將被編譯成原生的 PHP 代碼并緩存起來,除非它被修改,否則不會重新編譯,這就意味著 Blade 基本上不會給你的應用增加任何額外負擔。Blade 視圖文件使用 <code class=" language-php"><span class="token punctuation">.</span>blade<span class="token punctuation">.</span>php</code> 擴展名,一般被存放在 <code class=" language-php">resources<span class="token operator">/</span>views</code> 目錄。</p><p><a name="template-inheritance"></a></p><h2><a href="#template-inheritance">模板繼承</a></h2><p><a name="defining-a-layout"></a></p><h3>定義頁面布局</h3><p>Blade 的兩個主要優點是 <em>模板繼承</em> 和 <em>區塊</em> 。</p><p>為方便開始,讓我們先通過一個簡單的例子來上手。首先,我們需要確認一個 "master" 的頁面布局。因為大多數 web 應用是在不同的頁面中使用相同的布局方式,我們可以很方便的定義這個 Blade 布局視圖:</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token comment" spellcheck="true">&lt;!-- 文件保存于 resources/views/layouts/app.blade.php --&gt;</span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>title</span><span class="token punctuation">&gt;</span></span></span>應用程序名稱 <span class="token operator">-</span> @<span class="token keyword">yield</span><span class="token punctuation">(</span><span class="token string">'title'</span><span class="token punctuation">)</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>title</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span> @<span class="token function">section<span class="token punctuation">(</span></span><span class="token string">'sidebar'</span><span class="token punctuation">)</span> 這是 master 的側邊欄。 @show <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span> @<span class="token keyword">yield</span><span class="token punctuation">(</span><span class="token string">'content'</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span></span></code></pre><p>如你所見,該文件包含了典型的 HTML 語法。不過,請注意 <code class=" language-php">@section</code> 和 <code class=" language-php">@<span class="token keyword">yield</span></code> 命令。 <code class=" language-php">@section</code> 命令正如其名字所暗示的一樣是用來定義一個視圖區塊的,而 <code class=" language-php">@<span class="token keyword">yield</span></code> 指令是用來顯示指定區塊的內容的。</p><p>現在,我們已經定義好了這個應用程序的布局,讓我們接著來定義一個繼承此布局的子頁面。</p><p><a name="extending-a-layout"></a></p><h3>繼承頁面布局</h3><p>當定義子頁面時,你可以使用 Blade 提供的 <code class=" language-php">@<span class="token keyword">extends</span></code> 命令來為子頁面指定其所 「繼承」 的頁面布局。 當子頁面繼承布局之后,即可使用 <code class=" language-php">@section</code> 命令將內容注入于布局的 <code class=" language-php">@section</code> 區塊中。切記,在上面的例子里,布局中使用 <code class=" language-php">@<span class="token keyword">yield</span></code> 的地方將會顯示這些區塊中的內容:</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token comment" spellcheck="true">&lt;!-- Stored in resources/views/child.blade.php --&gt;</span></span> @<span class="token keyword">extends</span><span class="token punctuation">(</span><span class="token string">'layouts.app'</span><span class="token punctuation">)</span> @<span class="token function">section<span class="token punctuation">(</span></span><span class="token string">'title'</span><span class="token punctuation">,</span> <span class="token string">'Page Title'</span><span class="token punctuation">)</span> @<span class="token function">section<span class="token punctuation">(</span></span><span class="token string">'sidebar'</span><span class="token punctuation">)</span> @@<span class="token keyword">parent</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span></span>This is appended to the master sidebar<span class="token punctuation">.</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span> @endsection @<span class="token function">section<span class="token punctuation">(</span></span><span class="token string">'content'</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span></span>This is my body content<span class="token punctuation">.</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span> @endsection</code></pre><p>在上面的例子里,<code class=" language-php">sidebar</code> 區塊利用了 <code class=" language-php">@@<span class="token keyword">parent</span></code> 命令追加布局中的 sidebar 區塊中的內容,如果不使用則會覆蓋掉布局中的這部分內容。 <code class=" language-php">@@<span class="token keyword">parent</span></code> 命令會在視圖被渲染時替換為布局中的內容。</p><p>當然,可以通過在路由中使用全局輔助函數 <code class=" language-php">view</code> 來返回 Blade 視圖:</p><pre class=" language-php"><code class=" language-php"><span class="token scope">Route<span class="token punctuation">::</span></span><span class="token function">get<span class="token punctuation">(</span></span><span class="token string">'blade'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">view<span class="token punctuation">(</span></span><span class="token string">'child'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><a name="components-and-slots"></a></p><h2><a href="#components-and-slots">組件 &amp; Slots</a></h2><p>組件和 slots 能提供類似于區塊和布局的好處;不過,一些人可能發現組件和 slots 更容易理解。首先,讓我們假設一個會在我們應用中重復使用的「警告」組件:</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token comment" spellcheck="true">&lt;!-- /resources/views/alert.blade.php --&gt;</span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>alert alert-danger<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span> <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$slot</span> <span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span></code></pre><p><code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$slot</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code> 變量將包含我們希望注入到組件的內容。現在,我們可以使用 <code class=" language-php">@component</code> 指令來構造這個組件:</p><pre class=" language-php"><code class=" language-php">@<span class="token function">component<span class="token punctuation">(</span></span><span class="token string">'alert'</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>strong</span><span class="token punctuation">&gt;</span></span></span>哇!<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>strong</span><span class="token punctuation">&gt;</span></span></span> 出現了一些問題! @endcomponent</code></pre><p>有些時候它對于定義組件的多個 slots 是非常有幫助的。讓我們修改我們的警告組件,讓它支持注入一個「標題」。 已命名的 slots 將顯示「相對應」名稱的變量的值:</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token comment" spellcheck="true">&lt;!-- /resources/views/alert.blade.php --&gt;</span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>alert alert-danger<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>alert-title<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$title</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span> <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$slot</span> <span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span></code></pre><p>現在,我們可以使用 <code class=" language-php">@slot</code> 指令注入內容到已命名的 slot 中,任何沒有被 <code class=" language-php">@slot</code> 指令包裹住的內容將傳遞給組件中的 <code class=" language-php"><span class="token variable">$slot</span></code> 變量:</p><pre class=" language-php"><code class=" language-php">@<span class="token function">component<span class="token punctuation">(</span></span><span class="token string">'alert'</span><span class="token punctuation">)</span> @<span class="token function">slot<span class="token punctuation">(</span></span><span class="token string">'title'</span><span class="token punctuation">)</span> 拒絕 @endslot 你沒有權限訪問這個資源! @endcomponent</code></pre><h4>傳遞額外的數據給組件</h4><p>有時候你可能需要傳遞額外的數據給組件。為了解決這個問題,你可以傳遞一個數組作為第二個參數傳遞給 <code class=" language-php">@component</code> 指令。所有的數據都將以變量的形式傳遞給組件模版:</p><pre class=" language-php"><code class=" language-php">@<span class="token function">component<span class="token punctuation">(</span></span><span class="token string">'alert'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'foo'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token string">'bar'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> @endcomponent</code></pre><p><a name="displaying-data"></a></p><h2><a href="#displaying-data">顯示數據</a></h2><p>你可以使用 「中括號」 包住變量以顯示傳遞至 Blade 視圖的數據。如下面的路由設置:</p><pre class=" language-php"><code class=" language-php"><span class="token scope">Route<span class="token punctuation">::</span></span><span class="token function">get<span class="token punctuation">(</span></span><span class="token string">'greeting'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">view<span class="token punctuation">(</span></span><span class="token string">'welcome'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'name'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token string">'Samantha'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>你可以像這樣顯示 <code class=" language-php">name</code> 變量的內容:</p><pre class=" language-php"><code class=" language-php">Hello<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$name</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">.</span></code></pre><p>當然也不是說一定只能顯示傳遞至視圖的變量內容。你也可以顯示 PHP 函數的結果。事實上,你可以在 Blade 中顯示任意的 PHP 代碼:</p><pre class=" language-php"><code class=" language-php">The current <span class="token constant">UNIX</span> timestamp is <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token function">time<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">.</span></code></pre><blockquote class="has-icon note"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="90px" height="90px" viewBox="0 0 90 90" enable-background="new 0 0 90 90" xml:space="preserve"><path fill="#FFFFFF" d="M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z"></path></svg></span></div> Blade <code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code> 語法會自動調用 PHP <code class=" language-php">htmlspecialchars</code> 函數來避免 XSS 攻擊。</p></blockquote><h4>當數據存在時輸出</h4><p>有時候你可能想要輸出一個變量,但是你并不確定這個變量是否已經被定義,我們可以用像這樣的冗長 PHP 代碼表達:</p><pre class=" language-php"><code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token function">isset<span class="token punctuation">(</span></span><span class="token variable">$name</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token variable">$name</span> <span class="token punctuation">:</span> <span class="token string">'Default'</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>事實上,Blade 提供了更便捷的方式來代替這種三元運算符表達式:</p><pre class=" language-php"><code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$name</span> <span class="token keyword">or</span> <span class="token string">'Default'</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>在這個例子中,如果 <code class=" language-php"><span class="token variable">$name</span></code> 變量存在,它的值將被顯示出來。但是,如果它不存在,則會顯示 <code class=" language-php"><span class="token keyword">Default</span></code> 。</p><h4>顯示未轉義過的數據</h4><p>在默認情況下,Blade 模板中的 <code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code> 表達式將會自動調用 PHP <code class=" language-php">htmlspecialchars</code> 函數來轉義數據以避免 XSS 的攻擊。如果你不想你的數據被轉義,你可以使用下面的語法:</p><pre class=" language-php"><code class=" language-php">Hello<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token operator">!</span><span class="token operator">!</span> <span class="token variable">$name</span> <span class="token operator">!</span><span class="token operator">!</span><span class="token punctuation">}</span><span class="token punctuation">.</span></code></pre><blockquote class="has-icon note"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="90px" height="90px" viewBox="0 0 90 90" enable-background="new 0 0 90 90" xml:space="preserve"><path fill="#FFFFFF" d="M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z"></path></svg></span></div> 要非常小心處理用戶輸入的數據時,你應該總是使用 <code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code> 語法來轉義內容中的任何的 HTML 元素,以避免 XSS 攻擊。</p></blockquote><p><a name="blade-and-javascript-frameworks"></a></p><h3>Blade &amp; JavaScript 框架</h3><p>由于很多 JavaScript 框架都使用花括號來表明所提供的表達式,所以你可以使用 <code class=" language-php">@</code> 符號來告知 Blade 渲染引擎你需要保留這個表達式原始形態,例如:</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span></span>Laravel<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span></span> Hello<span class="token punctuation">,</span> @<span class="token punctuation">{</span><span class="token punctuation">{</span> name <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">.</span></code></pre><p>在這個例子里,<code class=" language-php">@</code> 符號最終會被 Blade 引擎剔除,并且 <code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span> name <span class="token punctuation">}</span><span class="token punctuation">}</span></code> 表達式會被原樣的保留下來,這樣就允許你的 JavaScript 框架來使用它了。</p><h4><code class=" language-php">@verbatim</code> 指令</h4><p>如果你需要在頁面中大片區塊中展示 JavaScript 變量,你可以使用 <code class=" language-php">@verbatim</code> 指令來包裹 HTML 內容,這樣你就不需要為每個需要解析的變量增加 <code class=" language-php">@</code> 符號前綴了:</p><pre class=" language-php"><code class=" language-php">@verbatim <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span> Hello<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span> name <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">.</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span> @endverbatim</code></pre><p><a name="control-structures"></a></p><h2><a href="#control-structures">控制結構</a></h2><p>除了模板繼承與數據顯示的功能以外,Blade 也給一般的 PHP 結構控制語句提供了方便的縮寫,比如條件表達式和循環語句。這些縮寫提供了更為清晰簡明的方式來使用 PHP 的控制結構,而且還保持與 PHP 語句的相似性。</p><p><a name="if-statements"></a></p><h3>If 語句</h3><p>你可以通過 <code class=" language-php">@<span class="token keyword">if</span></code>, <code class=" language-php">@<span class="token keyword">elseif</span></code>, <code class=" language-php">@<span class="token keyword">else</span></code> 及 <code class=" language-php">@<span class="token keyword">endif</span></code> 指令構建 <code class=" language-php"><span class="token keyword">if</span></code> 表達式。這些命令的功能等同于在 PHP 中的語法:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">count<span class="token punctuation">(</span></span><span class="token variable">$records</span><span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token number">1</span><span class="token punctuation">)</span> 我有一條記錄! @<span class="token keyword">elseif</span> <span class="token punctuation">(</span><span class="token function">count<span class="token punctuation">(</span></span><span class="token variable">$records</span><span class="token punctuation">)</span> <span class="token operator">&gt;</span> <span class="token number">1</span><span class="token punctuation">)</span> 我有多條記錄! @<span class="token keyword">else</span> 我沒有任何記錄! @<span class="token keyword">endif</span></code></pre><p>為了方便,Blade 也提供了一個 <code class=" language-php">@unless</code> 命令:</p><pre class=" language-php"><code class=" language-php">@unless <span class="token punctuation">(</span><span class="token scope">Auth<span class="token punctuation">::</span></span><span class="token function">check<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">)</span> 你尚未登錄。 @endunless</code></pre><p><a name="loops"></a></p><h3>循環</h3><p>除了條件表達式外,Blade 也支持 PHP 的循環結構,這些命令的功能等同于在 PHP 中的語法:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token variable">$i</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token variable">$i</span> <span class="token operator">&lt;</span> <span class="token number">10</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator">++</span><span class="token punctuation">)</span> 目前的值為 <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$i</span> <span class="token punctuation">}</span><span class="token punctuation">}</span> @<span class="token keyword">endfor</span> @<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$users</span> <span class="token keyword">as</span> <span class="token variable">$user</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span></span>此用戶為 <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">id</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span> @<span class="token keyword">endforeach</span> @forelse <span class="token punctuation">(</span><span class="token variable">$users</span> <span class="token keyword">as</span> <span class="token variable">$user</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span></span><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">name</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span> @empty <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span></span>沒有用戶<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span> @endforelse @<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span></span>我永遠都在跑循環。<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span> @<span class="token keyword">endwhile</span></code></pre><blockquote class="has-icon tip"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="56.6px" height="87.5px" viewBox="0 0 56.6 87.5" enable-background="new 0 0 56.6 87.5" xml:space="preserve"><path fill="#FFFFFF" d="M28.7 64.5c-1.4 0-2.5-1.1-2.5-2.5v-5.7 -5V41c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v10.1 5 5.8C31.2 63.4 30.1 64.5 28.7 64.5zM26.4 0.1C11.9 1 0.3 13.1 0 27.7c-0.1 7.9 3 15.2 8.2 20.4 0.5 0.5 0.8 1 1 1.7l3.1 13.1c0.3 1.1 1.3 1.9 2.4 1.9 0.3 0 0.7-0.1 1.1-0.2 1.1-0.5 1.6-1.8 1.4-3l-2-8.4 -0.4-1.8c-0.7-2.9-2-5.7-4-8 -1-1.2-2-2.5-2.7-3.9C5.8 35.3 4.7 30.3 5.4 25 6.7 14.5 15.2 6.3 25.6 5.1c13.9-1.5 25.8 9.4 25.8 23 0 4.1-1.1 7.9-2.9 11.2 -0.8 1.4-1.7 2.7-2.7 3.9 -2 2.3-3.3 5-4 8L41.4 53l-2 8.4c-0.3 1.2 0.3 2.5 1.4 3 0.3 0.2 0.7 0.2 1.1 0.2 1.1 0 2.2-0.8 2.4-1.9l3.1-13.1c0.2-0.6 0.5-1.2 1-1.7 5-5.1 8.2-12.1 8.2-19.8C56.4 12 42.8-1 26.4 0.1zM43.7 69.6c0 0.5-0.1 0.9-0.3 1.3 -0.4 0.8-0.7 1.6-0.9 2.5 -0.7 3-2 8.6-2 8.6 -1.3 3.2-4.4 5.5-7.9 5.5h-4.1H28h-0.5 -3.6c-3.5 0-6.7-2.4-7.9-5.7l-0.1-0.4 -1.8-7.8c-0.4-1.1-0.8-2.1-1.2-3.1 -0.1-0.3-0.2-0.5-0.2-0.9 0.1-1.3 1.3-2.1 2.6-2.1H41C42.4 67.5 43.6 68.2 43.7 69.6zM37.7 72.5H26.9c-4.2 0-7.2 3.9-6.3 7.9 0.6 1.3 1.8 2.1 3.2 2.1h4.1 0.5 0.5 3.6c1.4 0 2.7-0.8 3.2-2.1L37.7 72.5z"></path></svg></span></div> 當循環時,你可以使用 <a href="#the-loop-variable">循環變量</a> 來獲取循環中有價值的信息,比如循環中的首次或最后的迭代。</p></blockquote><p>當使用循環時,你可能也需要一些結束循環或者跳出當前循環的命令:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$users</span> <span class="token keyword">as</span> <span class="token variable">$user</span><span class="token punctuation">)</span> @<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">type</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span> @<span class="token keyword">continue</span> @<span class="token keyword">endif</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span></span><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">name</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span> @<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">number</span> <span class="token operator">==</span> <span class="token number">5</span><span class="token punctuation">)</span> @<span class="token keyword">break</span> @<span class="token keyword">endif</span> @<span class="token keyword">endforeach</span></code></pre><p>你也可以使用命令聲明包含條件的方式在一條語句中達到中斷:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$users</span> <span class="token keyword">as</span> <span class="token variable">$user</span><span class="token punctuation">)</span> @<span class="token keyword">continue</span><span class="token punctuation">(</span><span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">type</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span><span class="token punctuation">&gt;</span></span></span><span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">name</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span> @<span class="token keyword">break</span><span class="token punctuation">(</span><span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">number</span> <span class="token operator">==</span> <span class="token number">5</span><span class="token punctuation">)</span> @<span class="token keyword">endforeach</span></code></pre><p><a name="the-loop-variable"></a></p><h3>循環變量</h3><p>當循環時,你可以在循環內訪問 <code class=" language-php"><span class="token variable">$loop</span></code> 變量。這個變量可以提供一些有用的信息,比如當前循環的索引,當前循環是不是首次迭代,又或者當前循環是不是最后一次迭代:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$users</span> <span class="token keyword">as</span> <span class="token variable">$user</span><span class="token punctuation">)</span> @<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">first</span><span class="token punctuation">)</span> This is the first iteration<span class="token punctuation">.</span> @<span class="token keyword">endif</span> @<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">last</span><span class="token punctuation">)</span> This is the last iteration<span class="token punctuation">.</span> @<span class="token keyword">endif</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span></span>This is user <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">id</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span> @<span class="token keyword">endforeach</span></code></pre><p>如果你是在一個嵌套的循環中,你可以通過使用 <code class=" language-php"><span class="token variable">$loop</span></code> 變量的 <code class=" language-php"><span class="token keyword">parent</span></code> 屬性來獲取父循環中的 <code class=" language-php"><span class="token variable">$loop</span></code> 變量:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$users</span> <span class="token keyword">as</span> <span class="token variable">$user</span><span class="token punctuation">)</span> @<span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$user</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">posts</span> <span class="token keyword">as</span> <span class="token variable">$post</span><span class="token punctuation">)</span> @<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token keyword">parent</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">first</span><span class="token punctuation">)</span> This is first iteration of the <span class="token keyword">parent</span> loop<span class="token punctuation">.</span> @<span class="token keyword">endif</span> @<span class="token keyword">endforeach</span> @<span class="token keyword">endforeach</span></code></pre><p><code class=" language-php"><span class="token variable">$loop</span></code> 變量也包含了其它各種有用的屬性:</p><table><thead><tr><th>屬性</th><th>描述</th></tr></thead><tbody><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">index</span></code></td><td>當前循環所迭代的索引,起始為 0。</td></tr><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">iteration</span></code></td><td>當前迭代數,起始為 1。</td></tr><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">remaining</span></code></td><td>循環中迭代剩余的數量。</td></tr><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">count</span></code></td><td>被迭代項的總數量。</td></tr><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">first</span></code></td><td>當前迭代是否是循環中的首次迭代。</td></tr><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">last</span></code></td><td>當前迭代是否是循環中的最后一次迭代。</td></tr><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">depth</span></code></td><td>當前循環的嵌套深度。</td></tr><tr><td><code class=" language-php"><span class="token variable">$loop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token keyword">parent</span></code></td><td>當在嵌套的循環內時,可以訪問到父循環中的 $loop 變量。</td></tr></tbody></table><p><a name="comments"></a></p><h3>注釋</h3><p>Blade 也允許在頁面中定義注釋,然而,跟 HTML 的注釋不同的是,Blade 注釋不會被包含在應用程序返回的 HTML 內:</p><pre class=" language-php"><code class=" language-php"><span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token operator">--</span> 此注釋將不會出現在渲染后的 <span class="token constant">HTML</span> <span class="token operator">--</span><span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p><a name="php"></a></p><h3>PHP</h3><p>在某些情況下,它對于你在視圖文件中嵌入 php 代碼是非常有幫助的。你可以在你的模版中使用 Blade 提供的 <code class=" language-php">@php</code> 指令來執行一段純 PHP 代碼:</p><pre class=" language-php"><code class=" language-php">@php <span class="token comment" spellcheck="true"> // </span>@endphp</code></pre><blockquote class="has-icon tip"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="56.6px" height="87.5px" viewBox="0 0 56.6 87.5" enable-background="new 0 0 56.6 87.5" xml:space="preserve"><path fill="#FFFFFF" d="M28.7 64.5c-1.4 0-2.5-1.1-2.5-2.5v-5.7 -5V41c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v10.1 5 5.8C31.2 63.4 30.1 64.5 28.7 64.5zM26.4 0.1C11.9 1 0.3 13.1 0 27.7c-0.1 7.9 3 15.2 8.2 20.4 0.5 0.5 0.8 1 1 1.7l3.1 13.1c0.3 1.1 1.3 1.9 2.4 1.9 0.3 0 0.7-0.1 1.1-0.2 1.1-0.5 1.6-1.8 1.4-3l-2-8.4 -0.4-1.8c-0.7-2.9-2-5.7-4-8 -1-1.2-2-2.5-2.7-3.9C5.8 35.3 4.7 30.3 5.4 25 6.7 14.5 15.2 6.3 25.6 5.1c13.9-1.5 25.8 9.4 25.8 23 0 4.1-1.1 7.9-2.9 11.2 -0.8 1.4-1.7 2.7-2.7 3.9 -2 2.3-3.3 5-4 8L41.4 53l-2 8.4c-0.3 1.2 0.3 2.5 1.4 3 0.3 0.2 0.7 0.2 1.1 0.2 1.1 0 2.2-0.8 2.4-1.9l3.1-13.1c0.2-0.6 0.5-1.2 1-1.7 5-5.1 8.2-12.1 8.2-19.8C56.4 12 42.8-1 26.4 0.1zM43.7 69.6c0 0.5-0.1 0.9-0.3 1.3 -0.4 0.8-0.7 1.6-0.9 2.5 -0.7 3-2 8.6-2 8.6 -1.3 3.2-4.4 5.5-7.9 5.5h-4.1H28h-0.5 -3.6c-3.5 0-6.7-2.4-7.9-5.7l-0.1-0.4 -1.8-7.8c-0.4-1.1-0.8-2.1-1.2-3.1 -0.1-0.3-0.2-0.5-0.2-0.9 0.1-1.3 1.3-2.1 2.6-2.1H41C42.4 67.5 43.6 68.2 43.7 69.6zM37.7 72.5H26.9c-4.2 0-7.2 3.9-6.3 7.9 0.6 1.3 1.8 2.1 3.2 2.1h4.1 0.5 0.5 3.6c1.4 0 2.7-0.8 3.2-2.1L37.7 72.5z"></path></svg></span></div> 雖然 Blade 提供了這個功能,但頻繁地使用也同時意味著你在你的模版中嵌入了太多的邏輯了。</p></blockquote><p><a name="including-sub-views"></a></p><h2><a href="#including-sub-views">引入子視圖</a></h2><p>你可以使用 Blade 的 <code class=" language-php">@<span class="token keyword">include</span></code> 命令來引入一個已存在的視圖,所有在父視圖的可用變量在被引入的視圖中都是可用的。</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span></span> @<span class="token keyword">include</span><span class="token punctuation">(</span><span class="token string">'shared.errors'</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>form</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token comment" spellcheck="true">&lt;!-- Form Contents --&gt;</span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>form</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span></code></pre><p>盡管被引入的視圖會繼承父視圖中的所有數據,你也可以通過傳遞額外的數組數據至被引入的頁面:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">include</span><span class="token punctuation">(</span><span class="token string">'view.name'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'some'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token string">'data'</span><span class="token punctuation">]</span><span class="token punctuation">)</span></code></pre><p>當然,如果你嘗試使用 <code class=" language-php">@<span class="token keyword">include</span></code> 去引用一個不存在的視圖,Laravel 會拋出錯誤。如果你想引入一個視圖,而你又無法確認這個視圖存在與否,你可以使用 <code class=" language-php">@includeIf</code> 指令:</p><pre class=" language-php"><code class=" language-php">@<span class="token function">includeIf<span class="token punctuation">(</span></span><span class="token string">'view.name'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'some'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token string">'data'</span><span class="token punctuation">]</span><span class="token punctuation">)</span></code></pre><blockquote class="has-icon note"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="90px" height="90px" viewBox="0 0 90 90" enable-background="new 0 0 90 90" xml:space="preserve"><path fill="#FFFFFF" d="M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z"></path></svg></span></div> 請避免在 Blade 視圖中使用 <code class=" language-php"><span class="token constant">__DIR__</span></code> 及 <code class=" language-php"><span class="token constant">__FILE__</span></code> 常量,因為他們會引用視圖被緩存的位置。</p></blockquote><p><a name="rendering-views-for-collections"></a></p><h3>為集合渲染視圖</h3><p>你可以使用 Blade 的 <code class=" language-php">@each</code> 命令將循環及引入結合成一行代碼:</p><pre class=" language-php"><code class=" language-php">@<span class="token function">each<span class="token punctuation">(</span></span><span class="token string">'view.name'</span><span class="token punctuation">,</span> <span class="token variable">$jobs</span><span class="token punctuation">,</span> <span class="token string">'job'</span><span class="token punctuation">)</span></code></pre><p>第一個參數為每個元素要渲染的子視圖,第二個參數是你要迭代的數組或集合,而第三個參數為迭代時被分配至子視圖中的變量名稱。舉個例子,如果你需要迭代一個 <code class=" language-php">jobs</code> 數組,通常子視圖會使用 <code class=" language-php">job</code> 作為變量來訪問 job 信息。子視圖使用 <code class=" language-php">key</code> 變量作為當前迭代的鍵名。</p><p>你也可以傳遞第四個參數到 <code class=" language-php">@each</code> 命令。當需要迭代的數組為空時,將會使用這個參數提供的視圖來渲染。</p><pre class=" language-php"><code class=" language-php">@<span class="token function">each<span class="token punctuation">(</span></span><span class="token string">'view.name'</span><span class="token punctuation">,</span> <span class="token variable">$jobs</span><span class="token punctuation">,</span> <span class="token string">'job'</span><span class="token punctuation">,</span> <span class="token string">'view.empty'</span><span class="token punctuation">)</span></code></pre><p><a name="stacks"></a></p><h2><a href="#stacks">堆棧</a></h2><p>Blade 也允許你在其它視圖或布局中為已經命名的堆棧中壓入數據,這在子視圖中引入必備的 JavaScript 類庫時尤其有用:</p><pre class=" language-php"><code class=" language-php">@<span class="token function">push<span class="token punctuation">(</span></span><span class="token string">'scripts'</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/example.js<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span></span> @endpush</code></pre><p>你可以根據需要多次壓入堆棧,通過 <code class=" language-php">@stack</code> 命令中鍵入堆棧的名字來渲染整個堆棧:</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span></span> <span class="token markup"><span class="token comment" spellcheck="true">&lt;!-- Head Contents --&gt;</span></span> @<span class="token function">stack<span class="token punctuation">(</span></span><span class="token string">'scripts'</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span></span></code></pre><p><a name="service-injection"></a></p><h2><a href="#service-injection">服務注入</a></h2><p>你可以使用 <code class=" language-php">@inject</code> 命令來從 Larvel <a href="/docs/5.4/container">service container</a> 中取出服務。傳遞給 <code class=" language-php">@inject</code> 的第一個參數為置放該服務的變量名稱,而第二個參數為你想要解析的服務的類或是接口的名稱:</p><pre class=" language-php"><code class=" language-php">@<span class="token function">inject<span class="token punctuation">(</span></span><span class="token string">'metrics'</span><span class="token punctuation">,</span> <span class="token string">'App\Services\MetricsService'</span><span class="token punctuation">)</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span></span> Monthly Revenue<span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">{</span> <span class="token variable">$metrics</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">monthlyRevenue<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">.</span> <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span></code></pre><p><a name="extending-blade"></a></p><h2><a href="#extending-blade">拓展 Blade</a></h2><p>Blade 甚至允許你使用 <code class=" language-php">directive</code> 方法來注冊自己的命令。當 Blade 編譯器遇到該命令時,它將會帶參數調用提供的回調函數。</p><p>以下例子會創建一個把指定的 <code class=" language-php"><span class="token variable">$var</span></code> 格式化的 <code class=" language-php">@<span class="token function">datetime<span class="token punctuation">(</span></span><span class="token variable">$var</span><span class="token punctuation">)</span></code> 命令:</p><pre class=" language-php"><code class=" language-php"><span class="token php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Providers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Support<span class="token punctuation">\</span>Facades<span class="token punctuation">\</span>Blade</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Support<span class="token punctuation">\</span>ServiceProvider</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">AppServiceProvider</span> <span class="token keyword">extends</span> <span class="token class-name">ServiceProvider</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 運行服務注冊后的啟動進程。 * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">boot<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token scope">Blade<span class="token punctuation">::</span></span><span class="token function">directive<span class="token punctuation">(</span></span><span class="token string">'datetime'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$expression</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> "<span class="token delimiter">&lt;?php</span> <span class="token keyword">echo</span> <span class="token punctuation">(</span><span class="token variable">$expression</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">format<span class="token punctuation">(</span></span><span class="token string">'m/d/Y H:i'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter">?&gt;</span></span>"<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment" spellcheck="true">/** * 在容器注冊綁定。 * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">register<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><p>如你所見,我們可以使用鏈式調用 <code class=" language-php">format</code> 方法的表述方式傳遞到指令。所以,在這個例子里,最終該指令生成了的 PHP 代碼如下:</p><pre class=" language-php"><code class=" language-php"><span class="token php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">echo</span> <span class="token variable">$var</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">format<span class="token punctuation">(</span></span><span class="token string">'m/d/Y H:i'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter">?&gt;</span></span></code></pre><blockquote class="has-icon note"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="90px" height="90px" viewBox="0 0 90 90" enable-background="new 0 0 90 90" xml:space="preserve"><path fill="#FFFFFF" d="M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z"></path></svg></span></div> 在更新 Blade 指令的邏輯后,你將需要刪除所有已緩存的 Blade 視圖,使用 <code class=" language-php">view<span class="token punctuation">:</span>clear</code> Artisan 命令來清除被緩存的視圖。</p></blockquote></article>
                  <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>

                              哎呀哎呀视频在线观看