page contents

laravel blade 模版使用

section 指令定义了视图的一部分内容,而 @yield 指令是用来显示指定部分的内容。

attachments-2020-08-w8xWrgLr5f47751938c6b.jpg


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

  1. 关于 @show 与 其他结束符的使用说明:一般都是在父类模版中使用 @show 作为结束符,在子类模版中使用其他结束符。
  2. @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(name,default) 的形式会比较方便

  • @parent:保留父模板内容。但是 @yield 模板继承后继承模板将不会保留父模板内容


3. 其他

  • 注释部分也很简单,就是将 {{– …–}} 替换成 <?php / … / ?php>
  • compileRawEchos -> 输出未经转义的内容 ({!! … !!})
  • compileEscapedEchos -> 输出转义之后的内容 ({{{ … }}})
  • compileRegularEchos -> 正常输出 ({{ … }})


attachments-2020-08-a2G9nimv5f4774ef6d62d.jpg

  • 发表于 2020-08-27 16:56
  • 阅读 ( 619 )
  • 分类:框架系列

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章