ブレードテンプレートとは何ですか?

coldplay.xixi
リリース: 2020-07-02 10:55:48
オリジナル
3284 人が閲覧しました

Blade テンプレートは、Laravel によって提供されるテンプレート エンジンです。シンプルかつ強力です。Blade を使用すると、ビューでネイティブ PHP コードを使用できます。Laravel はビュー自体の代わりにコンパイルされたキャッシュ ファイルを使用するため、Blade は次のような場合に非常に役立ちますオーバーヘッドはゼロです。

ブレードテンプレートとは何ですか?

Blade テンプレートは:

Blade は Laravel が提供するテンプレート エンジンで、シンプルかつ強力です。他の PHP テンプレート エンジンとは異なり、Blade ではビューでネイティブ PHP コードを使用できます。

実際、すべての Blade ビューは最終的にネイティブ PHP コードにコンパイルされ、storage/framework/views フォルダーにキャッシュされます。

Laravel はビュー自体ではなく、これらのコンパイルされたキャッシュ ファイルを使用するため、Blade はアプリケーションのオーバーヘッドがゼロです。ビュー ファイルを変更すると、使用できるように再コンパイルされてキャッシュされます。ブレード ビューのサフィックス名は Blade.php で、通常は resources/views フォルダーに保存されます。

テンプレートの継承:

1. レイアウト ファイルの定義

ブレード テンプレート エンジンの主な 2 つの利点は、「テンプレートの継承」です。 「」と「ブロック」。簡単な例を挙げると、プロジェクトでは、ほぼすべてのページが同じレイアウトになっています。このとき、このレイアウトを抽出してマスター ページとして使用できます。このマスター ページを継承するすべてのページは、同じレイアウト効果を持ちます。マスターページの子ページ。マスター ページはレイアウト ファイルとも呼ばれ、レイアウト ファイルはブレード ビューです。

<!-- Stored in resources/views/layouts/app.blade.php -->
<html>
       <head>
             <title>App Name - @yield(&#39;title&#39;)</title>
       </head>
       <body>
         @section(&#39;sidebar&#39;)
               This is the master sidebar.
         @show
         <div class="container">
              @yield(&#39;content&#39;)
         </div>
       <body>
</html>
ログイン後にコピー

基本的な HTNL タグに加えて、レイアウト ファイルでは @section と @yield という 2 つの命令も使用されます。 @section はブロックを定義し、@yield はブロック内のコンテンツを定義します。 ######下。レイアウト ファイルのサブページを定義します。

2. レイアウト ファイルの継承

サブページで、Blade の @extends ディレクティブを使用して「継承」レイアウト ファイルを指定し、@section ディレクティブを使用して「継承」レイアウト ファイルを指定します。レイアウト ファイル内の「継承された」レイアウト ファイル @section および @yield ディレクティブが使用されている場所にコンテンツを挿入します:

<!-- Stored in resources/views/child.blade.php -->
@extends(&#39;layouts.app&#39;)
@section(&#39;title&#39;,&#39;Page Title&#39;)
@section(&#39;sidebar&#39;)
       <p> This is appended to the master sideebar</p>
@endsection
@section(&#39;content&#39;)
         <p>This ismy body content. </p>
@endsection
ログイン後にコピー

レイアウト ファイル内で @yield ディレクティブが使用されている場所では、@section が使用されていることがわかります。サブページにコンテンツを挿入するために引き続き使用されます。レイアウト ファイルでは @section ディレクティブ定義の利点の 1 つは、子ページで @section インジェクションを使用するときに、@parent ディレクティブを使用してコンテンツを (上書きするのではなく) 追加できることです。レイアウト ファイル内で @yield ディレクティブが使用されているレイアウト ファイルでは実行できません。 @parent ディレクティブは、ビューがレンダリングされるときにレイアウト ファイル内のコンテンツに置き換えられます。

ファイル レイアウトで定義されたサイドバーとは異なり、サブページは @show ではなく @endsection で終了することに注意してください。 @endsection はブロックを定義するためにのみ使用され、@show はブロックを定義してすぐに生成するために使用されるためです。

ルートからビュー ファイルを直接返すには、グローバル補助関数ヘルパーを使用する必要があります:

Route::get(&#39;blade&#39;, function(){
        return view(&#39;child&#39;);
})
ログイン後にコピー

3、コンポーネントとスロット

コンポーネントとスロット スロットは、レイアウトとブロックに同様の利点をもたらします。コンポーネントとスロットのメンタル モデルはより直感的です。プロジェクトに繰り返し可能な「ポップアップ ボックス」コンポーネントがあると想像してください。

<!-- Stored resource/views/alter.blade.php -->
<div class="alter alter-danger">
       {{ $slot }}
</div>
ログイン後にコピー

{{ $slot }}

は、挿入されたコンポーネントのコンテンツを表します。このコンポーネントを構築するには、Blade の @component ディレクティブを使用します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@component(&amp;#39;alter&amp;#39;) &lt;strong&gt;Whoops!&lt;/strong&gt; Something went wrong! @endcomponent</pre><div class="contentsignin">ログイン後にコピー</div></div>このシナリオでは、

{{ $slot }}

変数の内容は次のとおりです: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;strong&gt;Whoops! &lt;/strong&gt; Something went wrong!</pre><div class="contentsignin">ログイン後にコピー</div></div>場合によっては 1 つコンポーネントには複数のスロットが必要です。現時点では、コンポーネント コードをわずかに変更して、名前付きスロットと呼ばれる「タイトル」スロットを定義するだけで済みます。名前付きスロットは、その名前に一致する変数を単純に「印刷」することでコンテンツを表示します。

<!-- Stored resources/views/alter.blade.php-->
<div class="alter alter-danger">
         <div class="alter-title">{{ $title }}</div>
            {{ $slot }}
</div>
ログイン後にコピー

コンテンツを名前付きスロットに挿入するには、@slot ディレクティブを使用します。 @slot ディレクティブにないコンテンツはすべて、コンポーネントの

$slot

変数に渡されます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@compontent (&amp;#39;alter&amp;#39;) @slot(&amp;#39;title&amp;#39;) Forbidden @endslot You are not allowed to access this resource! @edcompontent~</pre><div class="contentsignin">ログイン後にコピー</div></div>

4. コンポーネントの追加データを渡す:

コンポーネントの追加データを渡すことが必要になる場合があります。これを行うには、2 番目の配列引数を @conponent ディレクティブに渡すことができます。渡すエクストラを指定します。過去のすべての追加データは、コンポーネント テンプレートの変数として使用できます:

@component
     <compontent(&#39;alter&#39;, [&#39;foo&#39; => &#39;bar&#39;);
         .....
@endCompontent
ログイン後にコピー

5. データの表示

渡してブレード ビューにデータを転送します。変数は次のようにラップされます。

[ ]

: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Route::get(&amp;#39;greeting&amp;#39;, function(){ return view(&amp;#39;welcome&amp;#39;, [ &amp;#39;name&amp;#39; =&gt; &amp;#39;&amp;#39;Samantha&amp;#39;]); })</pre><div class="contentsignin">ログイン後にコピー</div></div>name 変数を使用して内容を表示できます:

Hello! {{ $name }}
ログイン後にコピー

{{ }}

Yes ブレード ビューの print ステートメント。もちろん、print ステートメントは変数の内容を印刷することに限定されず、PHP の関数を使用することもできます。実際、ここの print ステートメントでは任意の PHP コードを使用できます: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">The current UNIX timestamp is {{ time() }}</pre><div class="contentsignin">ログイン後にコピー</div></div>

6. 転送されていないデータの表示

デフォルトでは、すべてが ## に渡されます。 #Blade {{ }}

ステートメントのコンテンツは、

htmlspecialchar 関数を使用して処理され、XSS 攻撃を回避するためにコンテンツがエスケープされます。出力コンテンツをエスケープする必要がない場合は、次の構文を使用できます:

Hello! {{!! $name !!}}.
ログイン後にコピー
ただし、エスケープされた {{ }} 構文を優先して使用する必要があることに注意してください。 XXS攻撃。ユーザーによる意図的または非意図的なデータ入力を回避することが難しい場合があるためです。

関連する学習の推奨事項:

Laravel

以上がブレードテンプレートとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!