国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ php教程 PHP開發(fā) LaravelテンプレートエンジンBladeのいくつかのセクションタグの違いの紹介

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

Dec 27, 2016 am 10:59 AM

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(&#39;zoneA&#39;)
      AAA
      @show
     
   
</div>
 
 
 
 
<div id="zoneB">
  @section(&#39;zoneB&#39;)
      BBB
      @stop
     
   
</div>
 
 
 
 
<div id="zoneC">
  @section(&#39;zoneC&#39;)
      CCC
      @show
     
   
</div>
{{-- page.view --}}
@extends(&#39;layout.master&#39;)
 
@section(&#39;zoneA&#39;)
aaa
@stop
 
@section(&#39;zoneB&#39;)
bbb
@stop
 
@section(&#39;zoneC&#39;)
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(&#39;content&#39;)
     
   
</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(&#39;content&#39;)
    @yield(&#39;message&#39;)
     
   
</div>
{{-- master --}}
<div>
  @section(&#39;content&#39;)
    加一行內(nèi)容
    @append
    @section(&#39;content&#39;)
    再加一行內(nèi)容
    @append
    @section(&#39;content&#39;)
    加夠了,結(jié)束吧
    @stop
    @section(&#39;content&#39;)
    都不要了,我說的。
    @override
     
   
</div>

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

<div>
  都不要了,我說的。
</div>

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

Laravel テンプレート エンジン Blade の一部のセクション タグの違いの詳細については、PHP 中國語 Web サイトを參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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