laravel blade 模版使用:@section、@yield、@parent、@stop、@overwrite、@append
1. @section 与 @yield
@section 指令定义了视图的一部分内容,而 @yield 指令是用来显示指定部分的内容。
@section 与 @yield 的区别:
- @yield 可以设置默认值,没有 @section 标签时会显示默认值。
- 有 @section 标签时会覆盖 @yield 的内容,且不支持用 @parent 重载原内容。
- @section 标签既可以覆盖 @section 的内容,也可以重载 @section 的内容。
- 当子模板不需要引用原父模板的内容时使用 @yield 即可。
2. 其他指令
- @section: 指令定义视图的一部分内容
- @show:是 @section 指令下面的结束符。还有其他结束符@stop、@endsection、@overwrite 以及 @append
- 关于 @show 与 其他结束符的使用说明:一般都是在父类模版中使用 @show 作为结束符,在子类模版中使用其他结束符。
- @stop 和 @endsection 结束关键字
这两个代表的都一样, @endsection属于老版本,新版本都用@stop, 所以建议以后都是用@stop, 如果考虑结构对称使用 @endsection 也可以。
- @show: 指的是执行到此处时将该 section 中的内容输出到页面
- @stop 则只是进行内容解析,并且不再处理当前模板中后续对该 section 的处理, 并不输出内容到页面.
但是如果前面在该 @section('xxx') ... @append 中调用 @parent, 然后在该当前 @section 模版中使用 @stop 结束符,则会替换 @parent 默认的原内容
实例1:
{{-- master.blade.php --}}
@section('content')
默认原内容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版继承 - 01</p>
@endsection
输出:
默认原内容
我是模版继承 - 01
实例2:
{{-- master.blade.php --}}
@section('content')
默认原内容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版继承 - 01</p>
@append
@section('content')
<p>我是模版继承 - 02</p>
@append
输出:
默认原内容
我是模版继承 - 01
我是模版继承 - 02
实例3:
{{-- master.blade.php --}}
@section('content')
默认原内容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版继承 - 01</p>
@append
@section('content')
@parent
<p>我是模版继承 - 02</p>
@stop
输出:
我是模版继承 - 02
我是模版继承 - 01
注意:@stop 的模版已经替换 @parent 继承的默认原内容
扩展: 如果把 master.blade.php 中的@section 换成 @yield("content", '默认原内容') 会是什么结果呢? 其实 @yield 和 @parent 和 @stop 的使用方式都没有变.我也展示下吧, 不一样的结果只是在 @yield 定义的内容不支持用 @parent 重载原内容的部分
实例1 - 扩展:
{{-- master.blade.php --}}
@yield('content', '默认原内容')
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版继承 - 01</p>
@endsection
输出:
我是模版继承 - 01
实例2:
{{-- master.blade.php --}}
@yield('content', '默认原内容')
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版继承 - 01</p>
@append
@section('content')
<p>我是模版继承 - 02</p>
@append
输出:
我是模版继承 - 01
我是模版继承 - 02
实例3:
{{-- master.blade.php --}}
@section('content')
默认原内容
@show
{{-- child.blade.php --}}
@section('content')
@parent
<p>我是模版继承 - 01</p>
@append
@section('content')
@parent
<p>我是模版继承 - 02</p>
@stop
输出:
我是模版继承 - 02
我是模版继承 - 01
注意:@stop 的模版已经替换 @parent 继承的默认原内容
@overwrite:覆盖之前的所有定义,以这次的为准
@append:再次添加模板
@yield:用来显示值定部分内容。如果你要定义的部分没有默认内容让子模板扩展的,那么用 @yield(default) 的形式会比较方便
@parent:保留父模板内容。但是 @yield 模板继承后继承模板将不会保留父模板内容
3. 其他
- 注释部分也很简单,就是将 {{– …–}} 替换成 <?php / … / ?php>
- compileRawEchos -> 输出未经转义的内容 ({!! … !!})
- compileEscapedEchos -> 输出转义之后的内容 ({{{ … }}})
- compileRegularEchos -> 正常输出 ({{ … }})