我有主布局模板,/views/web/main_lo.blade.php如
<html>
<head>
<meta charset="UTF-8">
<title>{{$title or 'Default Title'}}</title>
</head>
<body>
<div class="section-1-outer">
@section('section-1')
<div class="section-1-parent">parent section 1</div>
@show
</div>
<div class="section-2-outer">
@section('section-2')
<div class="section-2-parent">parent section 2</div>
@show
</div>
<div class="section-3-outer">
@section('section-3')
<div class="section-3-parent">parent section 3</div>
@show
</div>
<div>
@yield('content')
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
和一个部分模板:
@extends('web.main_lo')
@section('section-1')
@parent
<div class='section-1-child'>
<p>Appended to parent</p>
</div>
@stop
@section('section-2')
<div class='section-2-child'>
<p>Replace parent</p>
</div>
@stop
@section('section-3')
<div class='section-3-child'>
<p>Replace parent</p>
</div>
@overwrite
Run Code Online (Sandbox Code Playgroud)
现在这里的部分布局是扩展main_lo,这里是第一部分-1,很明显,子部分将包括父部分-1,父部分中的内容也将被打印.
现在我的困惑是第2节和第3节实现之间的区别,因为它们都替换了父节的内容,只有子节目中的内容被打印.我的意思是@overwrite当文档明确指出时,需要这个额外的标签
"请注意,扩展Blade布局的视图只会覆盖布局中的部分."
再有被盖写第使用@overwrite这也是用于替换父节的内容.
小智 4
Laravel 视图的部分有点奇怪,不好的地方是它从一开始就不明显。
节实际上是按相反的顺序扩展的,首先定义的节将是子节,后面定义的节将是父节。所以@parent实际上包括了后面可能出现的部分的内容。
这就是为什么我认为父母和孩子并不是这个系统的最佳术语。
这并不明显,因为传统的用例 - 布局 - 看起来布局部分是首先定义的。但实际上它们是在内容部分渲染后运行的。
该方法@overwrite实际上用于父部分,而不是子部分。这在您的示例中没有多大意义,因为您也在@show布局中产生 ( ) ,这意味着您不想在那里覆盖。
这样做的原因实际上是因为@overwrite它是针对不太传统的用例而设计的,而不是当您具有布局内容、父子关系时。
大多数情况下,当您包含一些部分文件时(可能到处都是),您使用相同的部分名称,并且当显示较早定义的部分而不是较晚定义的部分时,您会遇到问题。
| 归档时间: |
|
| 查看次数: |
6430 次 |
| 最近记录: |