LaravelテンプレートエンジンBladeのいくつかのセクションタグの違いの紹介、laravelblade_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:07:06
オリジナル
854 人が閲覧しました

LaravelテンプレートエンジンBlade、laravelbladeのいくつかのセクションタグの違いの紹介

Laravel フレームワークの Blade テンプレート エンジンは非常に使いやすいですが、公式ドキュメントの Blade の概要については詳しく書かれていないことや、明確になっていないこともあります。たとえば、使用中に次の問題が発生する可能性があります:

1. @yield と @section はどちらも置換可能なブロックを事前定義できます。 2 つの違いは何ですか?
2. @section は @show、@stop、@overwrite、@append で終了できます。これら 3 つの違いは何ですか?

この記事では、これらの問題について比較的シンプルだが直感的に紹介しようとしています。

@yield と @section

まず第一に、@yield は拡張可能ではありません。定義したい部分に拡張するサブテンプレートのデフォルトのコンテンツがない場合は、 @yield($name, $default) を使用する方が便利です。サブテンプレートに含まれていない このブロックのコンテンツを指定すると、デフォルトのコンテンツが表示されます。定義されている場合は、定義したコンテンツが表示されます。それはどちらか/またはです。

対照的に、@section は置き換えることも拡張することもできます。これが最大の違いです。例:

コードをコピーします コードは次のとおりです:

{{-- レイアウト.マスター --}}
@yield('タイトル','デフォルトのタイトル')

@section('コンテンツ')
デフォルトのコンテンツ
@show

コードをコピーします コードは次のとおりです:

{{-- home.index --}}
@extends('layout.master')

@section('タイトル')
@親
新しいタイトル
@やめて

@section('コンテンツ')
@親
拡張コンテンツ
@やめて

上記の例では、テンプレートは@yieldと@sectionを使用してそれぞれブロックを定義し、サブテンプレートに内容を定義しています。 @yieldは展開できないため、@parentを追加しても機能しません。出力内容には、「デフォルトのタイトル」を置き換える「新しいタイトル」のみが含まれます。したがって、最終的に生成されるページは、「デフォルト タイトル」または「新しいタイトル」のみにすることができ、両方にすることはできません。 @sectionで定義した部分は、@parentキーワードを使用しているため、親テンプレートの内容を保持し、展開後に追加した内容が追加され、出力内容は「デフォルトの内容を展開したもの」となります。コンテンツ"。

公式 Web サイトのドキュメントには @parent キーワードが含まれていません。これをオーバーライドするには @override を使用して終了する必要があります。これは間違っています。 ][docs] が修正されました。 @section と @stop の場合、デフォルトは置換 (挿入) で、展開するには @parent キーワードを使用する必要があります。 @override キーワードには、実際には別のアプリケーション シナリオがあります。

@show と @stop

次に、@section に対応する end キーワードについて説明します。@show と @stop の違いは何ですか? (インターネット上の一部の記事と一部のエディタ プラグインでも @endsection を要求します。これはバージョン 4.0 で削除されました。下位互換性がありますが、その使用は推奨されません)。

@show は、実行がこの時点に到達したときにセクション内のコンテンツをページに出力することを指しますが、 @stop はコンテンツの解析のみを実行し、 @override でカバーされない限り、現在のテンプレート内のセクションの後続の処理を処理しません (次を参照)詳細についてはセクションを参照してください)。一般に、初めてセクションを定義する場合は @show を使用し、置換または拡張する場合は @show を使用せず、@stop を使用する必要があります。例を使って説明しましょう:

コードをコピーします コードは次のとおりです:

{{-- レイアウト.マスター --}}

@セクション('ゾーンA')
AAA
@show








@セクション('ゾーンB')
BBB
@やめて








@section('zoneC')
CC
@show



コードをコピーします コードは次のとおりです:

{{-- page.view --}}
@extends('layout.master')

@セクション('ゾーンA')
ああ
@やめて

@セクション('ゾーンB')
BBB
@やめて

@section('zoneC')
CC
@show

layout.masterでは、@stopで「zoneB」を終了します。テンプレートシステム全体に@showで終わる「zoneB」の定義がないため、このブロックは表示されません。 page.view では、「zoneC」が @show で定義されており、実行がここに到達するとすぐにコンテンツが表示され、テンプレート継承メカニズムに従ってコンテンツが上書きされ続けるため、最終的に表示されるコンテンツは次のようになります:

コードをコピーします コードは次のとおりです:

ccc // page.view から

ああ















CC



結果から、zoneB のコンテンツは失われていることがわかります。これは、@show を使用してエンジンにコンテンツのこの部分を出力するよう指示していないためです。一方、zoneC のコンテンツは 2 回表示され、layout.master のページ構造が失われます。 @show が 2 回出現するため、これも破棄されます。

@append と @override

今述べたように、@override は親テンプレートのデフォルトのコンテンツを置き換えるために子テンプレートのコンテンツを指定するのではなく、別の目的があります。それでは、どのように使用するのでしょうか。これには、セクションがテンプレート内で複数回使用される可能性があるという問題が含まれます。つまり、定義した各セクションは、実際には後続のサブテンプレートに複数回出現する可能性があります。例:

コードをコピーします コードは次のとおりです:

{{-- マスター --}}

@yield('コンテンツ')



コードをコピーします コードは次のとおりです:

{{-- サブビュー --}}
@extends('マスター')

@section('コンテンツ')
コンテンツを追加します
@追加

@section('コンテンツ')
もう 1 行追加します
@追加

@section('コンテンツ')
十分な量が追加されましたので、今日は終わりにします。
@やめて

上記の例では、親テンプレートに「content」という名前のセクションのみを定義し、子テンプレートでこのセクションのコンテンツを3回指定しました。 この例の最終出力は次のとおりです:

コードをコピーします コードは次のとおりです:


コンテンツを追加します
もう 1 行追加します
十分な量が追加されましたので、今日は終わりにします。

3回指定した内容が表示されます。鍵となるのは「ここに内容を追加します」を示す@appendキーワードですので、内容は展開していきます。最後に @stop が付けられており、このセクションの処理がここで終了することを示します。 @append または @stop を使用してこのセクションの内容を指定し続けると、その内容は有効になりません。 @override で処理されない限り。 @override は、「以前の定義をすべて上書きし、この定義が優先される」ことを意味します。例:

コードをコピーします コードは次のとおりです:

{{-- マスター --}}

@yield('コンテンツ')
@yield('メッセージ')




コードをコピーします コードは次のとおりです:

{{-- マスター --}}

@section('コンテンツ')
コンテンツを 1 行追加します
@追加
@section('コンテンツ')
コンテンツをもう 1 行追加します
@追加
@section('コンテンツ')
追加したのは十分なので、終わりにしましょう
@やめて
@section('コンテンツ')
もうだめだ、そう言いました。
@オーバーライド



この例は、一連の定義が最後に追加されることを除いて、今の例と似ています。最終的な出力は次のようになります:

コードをコピーします コードは次のとおりです:


もうだめだ、と私は言いました。


したがって、正式なプロジェクトでは、データを走査して出力する必要がある場合に @append を使用できることがあります。しかし、特定のデータを走査して、前のデータがすべて間違っていることが判明した場合はどうすればよいでしょうか。 @override を使用してそれらをすべてオーバーライドします。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/955980.html技術記事 Laravel テンプレート エンジン Blade のいくつかのセクション タグの違いの紹介 laravelblade Laravel フレームワークの Blade テンプレート エンジンは非常に使いやすいですが、公式ドキュメントでの Blade の紹介は簡単ではありません...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート