亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Laravel模板引擎Blade中section的一些標簽的區別介紹

2024-05-04 23:31:06
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Laravel模板引擎Blade中section的一些標簽的區別介紹,本文講解了@yield 與 @section、@show 與 @stop、@append 和 @override的區別,需要的朋友可以參考下
 

Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文檔中有關 Blade 的介紹并不詳細,有些東西沒有寫出來,而有些則是沒有說清楚。比如,使用中可能會遇到這樣的問題:

1.@yield 和 @section 都可以預定義可替代的區塊,這兩者有什么區別呢?
2.@section 可以用 @show, @stop, @overwrite 以及 @append 來結束,這三者又有什么區別呢?

本文試對這些問題做一個比較淺顯但是直觀的介紹。

@yield 與 @section

首先,@yield 是不可擴展的,如果你要定義的部分沒有默認內容讓子模板擴展的,那么用 @yield($name, $default) 的形式會比較方便,如果你在子模板中并沒有指定這個區塊的內容,它就會顯示默認內容,如果定義了,就會顯示你定義的內容。非此即彼。

與之相比, @section 則既可以被替代,又可以被擴展,這是最大的區別。比如:

 

復制代碼代碼如下:

{{-- layout.master --}}
@yield('title','默認標題')
 
@section('content')
默認的內容
@show

 

 

復制代碼代碼如下:

{{-- home.index --}}
@extends('layout.master')
 
@section('title')
  @parent
  新的標題
@stop
 
@section('content')
  @parent
  擴展的內容
@stop

 

上面的例子中,模板用 @yield 和 @section 分別定義了一個區塊,然后在子模板中去定義內容,由于 @yield 不能被擴展,所以即使加上了 @parent 也不起作用,輸出的內容只有“新的標題”,替換了“默認的標題”。因此最終生成的頁面只能是“默認的標題”或者“新的標題”,不能并存。而 @section 定義的部分,由于使用了 @parent 關鍵字,父模板中的內容會被保留,然后再擴展后添加的內容進去,輸出的內容會是 “默認的內容 擴展的內容”。

官方網站上的文檔中并沒有涉及 @parent關鍵字,說的是默認行為是“擴展”,要覆蓋需要用 @override 來結束,這是錯的,[github 上的最新文檔][docs] 已經做了修正。@section 加上 @stop,默認是替換(注入),必須用 @parent 關鍵字才能擴展。而@override 關鍵字實際上有另外的應用場景。

@show 與 @stop

接下來再說說與 @section 對應的結束關鍵字,@show, @stop 有什么區別呢?(網上的部分文章,以及一些編輯器插件還會提示 @endsection, 這個在 4.0 版本中已經被移除,雖然向下兼容,但是不建議使用)。

@show 指的是執行到此處時將該 section 中的內容輸出到頁面,而 @stop 則只是進行內容解析,并且不再處理當前模板中后續對該section的處理,除非用 @override覆蓋(詳見下一部分)。通常來說,在首次定義某個 section 的時候,應該用 @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 中,用 @show 定義了 'zoneC',這會在執行到這里時立即顯示內容,并按照模板繼承機制繼續覆蓋內容,因此最終顯示的內容會是:

 

復制代碼代碼如下:

ccc // 來自 page.view
<div class="zoneA">
  aaa
     
   
</div>
 
 
 
 
<div class="zoneB">
   
</div>
 
 
 
 
<div class="zoneC">
  ccc
     
   
</div>

 

從結果可以看到,zoneB 的內容丟失,因為沒有用 @show 告訴引擎輸出這部分的內容,而 zoneC 的內容會顯示兩次,并且還破壞了 layout.master 的頁面結構,因為 @show 出現了兩次。

@append 和 @override

剛才說到了,@override 并不是在子模板中指明內容替換父模板的默認內容,而是另有用途,那么是如何使用呢?這又涉及到一個 section 在模板中可以多次使用的問題。也即我們所定義的每一個 section ,在隨后的子模板中其實是可以多次出現的。比如:

 

復制代碼代碼如下:

{{-- master --}}
<div>
  @yield('content')
     
   
</div>

 

 

復制代碼代碼如下:

{{-- subview --}}
@extends('master')
 
@section('content')
加一行內容
@append
 
@section('content')
再加一行內容
@append
 
@section('content')
加夠了,到此為止吧。
@stop

 

在上例中,我在父級模板中只定義了一個名為 "content" 的 section,而在子模板中三次指定了這個 section 的內容。 這個例子最終的輸出是:

 

復制代碼代碼如下:

<div>
加一行內容
再加一行內容
加夠了,到此為止吧。
</div>

 

三次指定的內容都顯示出來了,關鍵就在于 @append 這個關鍵字,它表明“此處的內容添加到”,因此內容會不斷擴展。而最后用了 @stop,表示這個 section 的處理到此為止。如果在后面繼續用 @append 或者 @stop 來指定這個 section 的內容,都不會生效。除非用 @override 來處理。 @override 的意思就是“覆蓋之前的所有定義,以這次的為準”。比如:

復制代碼代碼如下:

{{-- master --}}
<div>
  @yield('content')
    @yield('message')
     
   
</div>

復制代碼代碼如下:

{{-- master --}}
<div>
  @section('content')
    加一行內容
    @append
    @section('content')
    再加一行內容
    @append
    @section('content')
    加夠了,結束吧
    @stop
    @section('content')
    都不要了,我說的。
    @override
     
   
</div>

 

這個例子和剛才的類似,只不過最后加了一組定義。最終的輸出會是:

復制代碼代碼如下:

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

所以,在正式的項目中,有時候需要對數據進行遍歷輸出的,可以使用 @append,而如果遍歷到了某個數據發現前面的都錯了呢?用 @override 就可以全部推翻。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产小视频在线观看| 理论片在线不卡免费观看| 色七七影院综合| 日韩美女激情视频| 97碰碰碰免费色视频| 欧美特黄级在线| 久久精品一本久久99精品| 欧美猛少妇色xxxxx| 国产婷婷成人久久av免费高清| 欧美亚洲国产视频小说| 国产精品影院在线观看| 国产一区二区三区视频| 久久久久久久久久久91| 欧洲亚洲免费在线| 91精品在线观| 欧美黑人xxxⅹ高潮交| 久久久久久91| 欧美另类老肥妇| 97久久精品人搡人人玩| 久久人人爽人人爽人人片av高清| 欧美日韩美女在线观看| 亚洲国产欧美一区二区丝袜黑人| 77777少妇光屁股久久一区| 日韩少妇与小伙激情| 91社区国产高清| 国产精品欧美亚洲777777| 亚洲第一区在线观看| 国产精品黄页免费高清在线观看| 午夜精品美女自拍福到在线| 亚洲毛片在线看| 国色天香2019中文字幕在线观看| 国产精品91在线观看| 91精品综合久久久久久五月天| 亚洲美女av在线| 成人国内精品久久久久一区| 亚洲一区亚洲二区| 国内外成人免费激情在线视频| 久久精品这里热有精品| 欧美高清在线观看| 欧美极品少妇xxxxⅹ喷水| 国产精品欧美风情| 国产精品视频播放| 欧美美女操人视频| 国产精品一区专区欧美日韩| 亚洲天堂第二页| 九九热这里只有精品6| 国产亚洲欧美视频| 日韩精品在线视频观看| 国产精品久久久久久久久久新婚| 日韩在线观看免费全| 午夜精品久久久久久久99热| 狠狠躁夜夜躁人人爽超碰91| 欧美日韩国产专区| 日本国产高清不卡| 18久久久久久| 国产suv精品一区二区| 国产精品福利久久久| 亚洲aⅴ日韩av电影在线观看| 欧美日韩国产综合新一区| 亚洲国产一区二区三区四区| 国产精品成人va在线观看| 亚洲福利在线观看| 欧美wwwwww| 亚洲乱码国产乱码精品精天堂| 久久久久久久久中文字幕| 91系列在线播放| 中文字幕精品www乱入免费视频| 成人激情av在线| 亚洲男人天堂2024| 亚洲跨种族黑人xxx| 大胆人体色综合| 成人国产精品一区| 45www国产精品网站| 精品久久久久人成| 日韩精品视频中文在线观看| 精品免费在线视频| 亚洲大胆人体视频| 亚洲毛片一区二区| 亚洲第一网站免费视频| 91精品久久久久久久久久久久久久| 91av在线国产| 麻豆国产va免费精品高清在线| 日韩经典第一页| 狠狠躁夜夜躁人人爽天天天天97| 国产一区二区三区视频免费| 国产欧美日韩亚洲精品| 亚洲第一精品夜夜躁人人躁| 日韩免费不卡av| 久久久久久亚洲精品中文字幕| 日本19禁啪啪免费观看www| 精品亚洲男同gayvideo网站| 久久成人精品视频| 久久视频免费观看| 深夜福利日韩在线看| 欧美性xxxx在线播放| 尤物精品国产第一福利三区| 深夜成人在线观看| 精品福利樱桃av导航| 日韩www在线| 亚洲精品日韩av| 欧美最近摘花xxxx摘花| 国产精品一区二区三区久久| 日韩精品中文字幕视频在线| 国产精品在线看| 国产一区二区激情| 日日噜噜噜夜夜爽亚洲精品| 国产一区二区黑人欧美xxxx| 亚洲www永久成人夜色| 97色在线视频| 欧美亚洲另类在线| 色婷婷亚洲mv天堂mv在影片| 国产成人精品日本亚洲| 亚洲图片在线综合| xxav国产精品美女主播| 日韩成人在线视频网站| 国产免费一区视频观看免费| 欧美人与性动交a欧美精品| 国产大片精品免费永久看nba| 日本午夜精品理论片a级appf发布| 久久精品这里热有精品| 久久久久久av| 欧美亚洲国产日本| 亚洲精品国产精品国自产在线| 国产精品视频yy9099| 亚洲成人在线视频播放| 亚洲国产成人av在线| 欧美精品福利视频| 国产成人综合一区二区三区| 日韩在线不卡视频| 日韩av网址在线| 日韩免费电影在线观看| 色无极亚洲影院| 国产在线精品自拍| 欧美日韩国产精品一区二区三区四区| 久久久精品2019中文字幕神马| 亚洲性夜色噜噜噜7777| 欧美电影免费播放| 亚洲的天堂在线中文字幕| 国产欧美日韩综合精品| 色婷婷综合久久久久中文字幕1| 亚洲人成电影在线播放| 中文字幕国产精品| 夜夜嗨av色一区二区不卡| 隔壁老王国产在线精品| 91久久精品国产91久久| 国产情人节一区| 国产精品视频99| 精品国产视频在线| 日韩美女激情视频| 欧美日韩国产限制| 成人在线小视频| 国色天香2019中文字幕在线观看| 欧美影院成年免费版| 精品中文字幕视频| 欧美激情精品久久久久久久变态| 97在线精品视频| 亚洲亚裔videos黑人hd| 日韩欧美视频一区二区三区| xxxxx91麻豆| 久久精品免费播放| 8090理伦午夜在线电影| 欧美大成色www永久网站婷| 国产精品ⅴa在线观看h| 91在线免费观看网站|