ホームページ >PHPフレームワーク >Laravel >ブレードテンプレートとは何ですか?
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('title')</title> </head> <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> <body> </html>
基本的な HTNL タグに加えて、レイアウト ファイルでは @section と @yield という 2 つの命令も使用されます。 @section はブロックを定義し、@yield はブロック内のコンテンツを定義します。 ######下。レイアウト ファイルのサブページを定義します。
2. レイアウト ファイルの継承サブページで、Blade の @extends ディレクティブを使用して「継承」レイアウト ファイルを指定し、@section ディレクティブを使用して「継承」レイアウト ファイルを指定します。レイアウト ファイル内の「継承された」レイアウト ファイル @section および @yield ディレクティブが使用されている場所にコンテンツを挿入します:
<!-- Stored in resources/views/child.blade.php --> @extends('layouts.app') @section('title','Page Title') @section('sidebar') <p> This is appended to the master sideebar</p> @endsection @section('content') <p>This ismy body content. </p> @endsection
レイアウト ファイル内で @yield ディレクティブが使用されている場所では、@section が使用されていることがわかります。サブページにコンテンツを挿入するために引き続き使用されます。レイアウト ファイルでは @section ディレクティブ定義の利点の 1 つは、子ページで @section インジェクションを使用するときに、@parent ディレクティブを使用してコンテンツを (上書きするのではなく) 追加できることです。レイアウト ファイル内で @yield ディレクティブが使用されているレイアウト ファイルでは実行できません。 @parent ディレクティブは、ビューがレンダリングされるときにレイアウト ファイル内のコンテンツに置き換えられます。
ファイル レイアウトで定義されたサイドバーとは異なり、サブページは @show ではなく @endsection で終了することに注意してください。 @endsection はブロックを定義するためにのみ使用され、@show はブロックを定義してすぐに生成するために使用されるためです。
ルートからビュー ファイルを直接返すには、グローバル補助関数ヘルパーを使用する必要があります:
Route::get('blade', function(){ return view('child'); })3、コンポーネントとスロット
コンポーネントとスロット スロットは、レイアウトとブロックに同様の利点をもたらします。コンポーネントとスロットのメンタル モデルはより直感的です。プロジェクトに繰り返し可能な「ポップアップ ボックス」コンポーネントがあると想像してください。
<!-- Stored resource/views/alter.blade.php --> <div class="alter alter-danger"> {{ $slot }} </div>{{ $slot }}
は、挿入されたコンポーネントのコンテンツを表します。このコンポーネントを構築するには、Blade の @component ディレクティブを使用します: <pre class="brush:php;toolbar:false">@component(&#39;alter&#39;)
<strong>Whoops!</strong> Something went wrong!
@endcomponent</pre>
このシナリオでは、
変数の内容は次のとおりです: <pre class="brush:php;toolbar:false"><strong>Whoops! </strong> Something went wrong!</pre>
場合によっては 1 つコンポーネントには複数のスロットが必要です。現時点では、コンポーネント コードをわずかに変更して、名前付きスロットと呼ばれる「タイトル」スロットを定義するだけで済みます。名前付きスロットは、その名前に一致する変数を単純に「印刷」することでコンテンツを表示します。
<!-- Stored resources/views/alter.blade.php--> <div class="alter alter-danger"> <div class="alter-title">{{ $title }}</div> {{ $slot }} </div>
コンテンツを名前付きスロットに挿入するには、@slot ディレクティブを使用します。 @slot ディレクティブにないコンテンツはすべて、コンポーネントの
$slot 変数に渡されます。 <pre class="brush:php;toolbar:false">@compontent (&#39;alter&#39;)
@slot(&#39;title&#39;)
Forbidden
@endslot
You are not allowed to access this resource!
@edcompontent~</pre>
コンポーネントの追加データを渡すことが必要になる場合があります。これを行うには、2 番目の配列引数を @conponent ディレクティブに渡すことができます。渡すエクストラを指定します。過去のすべての追加データは、コンポーネント テンプレートの変数として使用できます:
@component <compontent('alter', ['foo' => 'bar'); ..... @endCompontent5. データの表示
渡してブレード ビューにデータを転送します。変数は次のようにラップされます。
[ ]: <pre class="brush:php;toolbar:false">Route::get(&#39;greeting&#39;, function(){
return view(&#39;welcome&#39;, [ &#39;name&#39; => &#39;&#39;Samantha&#39;]);
})</pre>
name 変数を使用して内容を表示できます:
Hello! {{ $name }}{{ }}
Yes ブレード ビューの print ステートメント。もちろん、print ステートメントは変数の内容を印刷することに限定されず、PHP の関数を使用することもできます。実際、ここの print ステートメントでは任意の PHP コードを使用できます: <pre class="brush:php;toolbar:false">The current UNIX timestamp is {{ time() }}</pre>
デフォルトでは、すべてが ## に渡されます。 #Blade {{ }}
ステートメントのコンテンツは、 htmlspecialchar 関数を使用して処理され、XSS 攻撃を回避するためにコンテンツがエスケープされます。出力コンテンツをエスケープする必要がない場合は、次の構文を使用できます:
Hello! {{!! $name !!}}.
ただし、エスケープされた
{{ }} 構文を優先して使用する必要があることに注意してください。 XXS攻撃。ユーザーによる意図的または非意図的なデータ入力を回避することが難しい場合があるためです。 関連する学習の推奨事項:
以上がブレードテンプレートとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。