Laravel フレームワークの Blade テンプレート エンジンは非常に使いやすいですが、公式ドキュメントの Blade の概要については詳しく書かれていないことや、明確になっていないこともあります。たとえば、使用中に次の問題が発生する可能性があります:
1. @yield と @section は両方とも置換可能なブロックを事前定義できます。この 2 つの違いは何ですか?
2. @section は @show、@stop、@overwrite、@append で終了できます。これら 3 つの違いは何ですか?
この記事では、これらの問題について比較的シンプルだが直観的に紹介しようとしています。
@yield と @section
まず第一に、@yield は拡張可能ではありません。定義したいセクションに、拡張するサブテンプレートのデフォルトのコンテンツがない場合は、@yield( を使用する方が便利です。 $name、$default)。サブテンプレートでこのブロックの內(nèi)容を指定しない場合は、デフォルトの內(nèi)容が表示されます。定義されている場合は、定義した內(nèi)容が表示されます。それはどちらか/またはです。
対照的に、@section は置き換えることも拡張することもできます。これが最大の違いです。例:
{{-- layout.master --}} @yield('title','默認標題') @section('content') 默認的內(nèi)容 @show
{{-- home.index --}} @extends('layout.master') @section('title') @parent 新的標題 @stop @section('content') @parent 擴展的內(nèi)容 @stop
上記の例では、テンプレートは @yield と @section を使用してそれぞれブロックを定義し、@yield は @parent を追加しても展開できないため、サブテンプレートにコンテンツを定義します。機能しません。出力內(nèi)容は「デフォルトのタイトル」を置き換える「新しいタイトル」のみです。したがって、最終的に生成されるページは「デフォルト タイトル」または「新しいタイトル」のみにすることができ、両方にすることはできません。 @sectionで定義した部分は、@parentキーワードを使用しているため、親テンプレートの內(nèi)容を保持し、展開後に追加した內(nèi)容が追加され、出力內(nèi)容は「デフォルトの內(nèi)容を展開したもの」となります。コンテンツ"。
公式 Web サイトのドキュメントには @parent キーワードが含まれていません。これをオーバーライドするには、@override を使用して終了する必要があります。[github の最新ドキュメント] ][ドキュメント] 修正が行われました。 @section と @stop の場合、デフォルトは置換 (挿入) であり、展開するには @parent キーワードを使用する必要があります。 @override キーワードには、実際には別のアプリケーション シナリオがあります。
@show と @stop
次に、@section に対応する終了キーワードについて説明します。@show と @stop の違いは何でしょうか。 (インターネット上の一部の記事と一部のエディタ プラグインでも @endsection を要求します。これはバージョン 4.0 で削除されました。下位互換性がありますが、その使用は推奨されません)。
@show は、実行がこの時點に到達したときにセクション內(nèi)のコンテンツをページに出力することを指しますが、 @stop はコンテンツの解析のみを?qū)g行し、@override でカバーされない限り、現(xiàn)在のテンプレート內(nèi)のセクションの後続の処理を処理しません (「詳細については次のセクションを參照してください)。一般に、初めてセクションを定義する場合は @show を使用し、置換または拡張する場合は @show を使用せず、@stop を使用する必要があります。以下は例です。
{{-- layout.master --}} <div id="zoneA"> @section('zoneA') AAA @show </div> <div id="zoneB"> @section('zoneB') BBB @stop </div> <div id="zoneC"> @section('zoneC') CCC @show </div>
{{-- page.view --}} @extends('layout.master') @section('zoneA') aaa @stop @section('zoneB') bbb @stop @section('zoneC') ccc @show
layout.masterでは、@stopを使用して「zoneB」を終了します。テンプレートシステム全體に@showで終わる「zoneB」の定義がないため、このブロックは表示されません。 page.view では、「zoneC」が @show で定義されており、実行がここに到達するとすぐにコンテンツを表示し、テンプレート継承メカニズムに従ってコンテンツを上書きし続けるため、最終的に表示されるコンテンツは次のようになります:
ccc // 來自 page.view <div class="zoneA"> aaa </div> <div class="zoneB"> </div> <div class="zoneC"> ccc </div>
結(jié)果からわかるように、zoneB のコンテンツは失われます。これは、@show を使用してエンジンにコンテンツのこの部分を出力するよう指示していないためです。一方、zoneC のコンテンツは 2 回表示され、レイアウトのページ構(gòu)造は失われます。 @show が 2 回出現(xiàn)するため、.master も破棄されます。
@append と @override
先ほど述べたように、@override は親テンプレートのデフォルトのコンテンツを置き換えるために子テンプレートのコンテンツを指定するのではなく、別の目的があります。これには、セクションがテンプレート內(nèi)で複數(shù)回使用される可能性があるという問題が含まれます。つまり、定義した各セクションは、実際には後続のサブテンプレートに複數(shù)回出現(xiàn)する可能性があります。例:
{{-- master --}} <div> @yield('content') </div>
{{-- subview --}}
@extends('master')
@section('content')
コンテンツの行を追加
@append
@section('content')
コンテンツを 1 行追加します
@append
@section('content')
で十分です。これで終わりにしましょう。
@stop
上記の例では、親テンプレートに「content」という名前のセクションのみを定義し、子テンプレートでこのセクションのコンテンツを 3 回指定しました。 この例の最終出力は次のとおりです:
<div> 加一行內(nèi)容 再加一行內(nèi)容 加夠了,到此為止吧。 </div>
3 回指定されたコンテンツが表示されます。キーは @append キーワードにあり、「ここにコンテンツが追加される」ことを示すため、コンテンツは展開され続けます。最後に @stop が付けられており、このセクションの処理がここで終了することを示します。 @append または @stop を使用してこのセクションの內(nèi)容を指定し続けると、その內(nèi)容は有効になりません。 @override で処理されない限り。 @override は、「以前の定義をすべて上書きし、この定義が優(yōu)先される」ことを意味します。例:
{{-- master --}} <div> @yield('content') @yield('message') </div>
{{-- master --}} <div> @section('content') 加一行內(nèi)容 @append @section('content') 再加一行內(nèi)容 @append @section('content') 加夠了,結(jié)束吧 @stop @section('content') 都不要了,我說的。 @override </div>
この例は、一連の定義が最後に追加される點を除いて、先ほどの例と似ています。最終的な出力は次のようになります:
<div> 都不要了,我說的。 </div>
したがって、正式なプロジェクトでは、データを走査して出力する必要がある場合があります。しかし、特定のデータを走査して、前のデータがすべて間違っていることが判明した場合はどうなるでしょうか。 ? @override を使用してそれらをすべてオーバーライドします。
Laravel テンプレート エンジン Blade の一部のセクション タグの違いの詳細については、PHP 中國語 Web サイトを參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)