gpt4 book ai didi

laravel-4 - Laravel Blade 模板差异

转载 作者:行者123 更新时间:2023-12-04 15:22:57 24 4
gpt4 key购买 nike

我有主布局模板 /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>

和一个部分模板:
@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

现在这里的部分布局正在扩展 main_lo,这里的 First section-1 很明显,子部分将包含父部分 1 并且父部分中的内容也将被打印。

现在我的困惑是第 2 节和第 3 节实现之间的区别是什么,因为它们都替换了父节的内容,并且只打印了子节的内容。我的意思是需要这个额外的 @overwrite标记何时 documentation明确指出

"Note that views which extend a Blade layout simply override sections from the layout."



然后是 覆盖部分 使用 @overwrite这也用于替换父部分的内容。

最佳答案

Laravel View 的部分有点奇怪,不好的部分是从一开始就不明显。

节实际上以相反的顺序扩展,首先定义的节将是子节,后面的节将是父节。所以@parent实际上包括后面可能出现的部分的内容。
这就是为什么我认为 parent 和 child 不是这个系统的最佳条款。

这并不明显,因为传统的用例 - 布局 - 看起来布局部分是最先定义的部分。但实际上它们是在内容部分呈现后运行的。

这意味着 @overwrite实际上与父部分一起使用,而不是与子部分一起使用。这在您的示例中没有多大意义,因为您也在布局中产生( @show ),这意味着您不想在那里覆盖。

之所以会这样,其实是因为@overwrite是为不太传统的用例而设计的,而不是当您有布局-内容、父子关系时。
大多数情况下,当您包含一些部分文件时会发生这种情况 - 可能到处都是 - 您使用相同的部分名称,并且当较早定义的部分显示而不是稍后显示时,您会遇到问题。

关于laravel-4 - Laravel Blade 模板差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com