专业编程基础技术教程

网站首页 > 基础教程 正文

优雅的laravel blade 模板使用,你掌握了吗?

ccvgpt 2024-08-03 12:41:56 基础教程 10 ℃

laravel blade 模版使用:

@section、@yield、@parent、@stop、@overwrite、@append

优雅的laravel blade 模板使用,你掌握了吗?


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 -> 正常输出 ({{ … }})

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

部分资料展示:

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

Tags:

最近发表
标签列表