Laravel模板引擎Blade中section的一些标签的区别介绍.docx

Laravel模板引擎Blade中section的一些标签的区别介绍.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

这篇文章主要介绍了Laravel模板引擎Blade中section的一些标签的区别介绍,本文讲解了@yield与@section、@show与@stop、@append和@override的区别,需要的朋友可以参考下

Laravel框架中的Blade模板引擎,很好用,但是在官方文档中有关Blade的介绍并不详细,有些东西没有写出来,而有些则是没有说清楚。比如,使用中可能会遇到这样的问题:

和@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--}}lt;divid=zoneAgt;@section(zoneA)AAA

@showlt;/divgt;

lt;divid=zoneBgt;@section(zoneB)

BBB

@stoplt;/divgt;

lt;divid=zoneCgt;@section(zoneC)

CCC

@show

lt;/divgt;

代码如下:

{{--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.viewlt;divclass=zoneAgt;aaa

lt;/divgt

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地湖北
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档