laravel blade 模版使用:@section、@yield溉旋、@parent畸冲、@stop、@overwrite观腊、@append
1. @section 與 @yield
@section 指令定義了視圖的一部分內(nèi)容邑闲,而 @yield 指令是用來顯示指定部分的內(nèi)容。
@section 與 @yield 的區(qū)別:
- @yield 可以設(shè)置默認值梧油,沒有 @section 標簽時會顯示默認值苫耸。
- 有 @section 標簽時會覆蓋 @yield 的內(nèi)容,且不支持用 @parent 重載原內(nèi)容儡陨。
- @section 標簽既可以覆蓋 @section 的內(nèi)容褪子,也可以重載 @section 的內(nèi)容。
- 當(dāng)子模板不需要引用原父模板的內(nèi)容時使用 @yield 即可迄委。
2. 其他指令
- @section: 指令定義視圖的一部分內(nèi)容
- @show:是 @section 指令下面的結(jié)束符褐筛。還有其他結(jié)束符@stop、@endsection叙身、@overwrite 以及 @append
- 關(guān)于 @show 與 其他結(jié)束符的使用說明:一般都是在父類模版中使用 @show 作為結(jié)束符渔扎,在子類模版中使用其他結(jié)束符。
- @stop 和 @endsection 結(jié)束關(guān)鍵字
這兩個代表的都一樣, @endsection屬于老版本,新版本都用@stop, 所以建議以后都是用@stop, 如果考慮結(jié)構(gòu)對稱使用 @endsection 也可以信轿。
- @show: 指的是執(zhí)行到此處時將該 section 中的內(nèi)容輸出到頁面
- @stop 則只是進行內(nèi)容解析晃痴,并且不再處理當(dāng)前模板中后續(xù)對該 section 的處理, 并不輸出內(nèi)容到頁面.
但是如果前面在該 @section('xxx') ... @append 中調(diào)用 @parent, 然后在該當(dāng)前 @section 模版中使用 @stop 結(jié)束符财忽,則會替換 @parent 默認的原內(nèi)容
實例1:
{{-- master.blade.php --}}
@section('content')
默認原內(nèi)容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版繼承 - 01</p>
@endsection
輸出:
默認原內(nèi)容
我是模版繼承 - 01
實例2:
{{-- master.blade.php --}}
@section('content')
默認原內(nèi)容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版繼承 - 01</p>
@append
@section('content')
<p>我是模版繼承 - 02</p>
@append
輸出:
默認原內(nèi)容
我是模版繼承 - 01
我是模版繼承 - 02
實例3:
{{-- master.blade.php --}}
@section('content')
默認原內(nèi)容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版繼承 - 01</p>
@append
@section('content')
@parent
<p>我是模版繼承 - 02</p>
@stop
輸出:
我是模版繼承 - 02
我是模版繼承 - 01
注意:@stop 的模版已經(jīng)替換 @parent 繼承的默認原內(nèi)容
擴展: 如果把 master.blade.php 中的@section 換成 @yield("content", '默認原內(nèi)容') 會是什么結(jié)果呢倘核? 其實 @yield 和 @parent 和 @stop 的使用方式都沒有變.我也展示下吧, 不一樣的結(jié)果只是在 @yield 定義的內(nèi)容不支持用 @parent 重載原內(nèi)容的部分
實例1 - 擴展:
{{-- master.blade.php --}}
@yield('content', '默認原內(nèi)容')
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版繼承 - 01</p>
@endsection
輸出:
我是模版繼承 - 01
實例2:
{{-- master.blade.php --}}
@yield('content', '默認原內(nèi)容')
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版繼承 - 01</p>
@append
@section('content')
<p>我是模版繼承 - 02</p>
@append
輸出:
我是模版繼承 - 01
我是模版繼承 - 02
實例3:
{{-- master.blade.php --}}
@section('content')
默認原內(nèi)容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版繼承 - 01</p>
@append
@section('content')
@parent
<p>我是模版繼承 - 02</p>
@stop
輸出:
我是模版繼承 - 02
我是模版繼承 - 01
注意:@stop 的模版已經(jīng)替換 @parent 繼承的默認原內(nèi)容
@overwrite:覆蓋之前的所有定義即彪,以這次的為準
@append:再次添加模板
@yield:用來顯示值定部分內(nèi)容紧唱。如果你要定義的部分沒有默認內(nèi)容讓子模板擴展的活尊,那么用 @yield(
default) 的形式會比較方便
@parent:保留父模板內(nèi)容。但是 @yield 模板繼承后繼承模板將不會保留父模板內(nèi)容
3. 其他
- 注釋部分也很簡單漏益,就是將 {{– …–}} 替換成 <?php / … / ?php>
- compileRawEchos -> 輸出未經(jīng)轉(zhuǎn)義的內(nèi)容 ({!! … !!})
- compileEscapedEchos -> 輸出轉(zhuǎn)義之后的內(nèi)容 ({{{ … }}})
- compileRegularEchos -> 正常輸出 ({{ … }})