Laravel刀片模板差异

Posted

技术标签:

【中文标题】Laravel刀片模板差异【英文标题】:Laravel blade templating discrepancy 【发布时间】:2014-02-05 19:26:59 【问题描述】:

我有主布局模板/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 节实现之间到底有什么区别,因为它们都替换了父节的内容,并且只有子节中的内容被打印出来。我的意思是当documentation 明确指出时,需要这个额外的@overwrite 标签

"请注意,扩展 Blade 布局的视图只是覆盖部分 从布局。”

然后有 Overwriting Sections 使用@overwrite 也用于替换父节的内容。

【问题讨论】:

好问题。这里有一些指导:laravel-recipes.com/recipes/244 【参考方案1】:

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

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

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

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

这样做的原因实际上是因为@overwrite 是针对不太常规的用例而设计的,而不是当您具有布局内容、父子关系时。 大多数情况下,当您包含一些部分文件时(可能到处都是),您使用相同的部分名称并且当较早定义的部分是显示而不是较晚定义的部分时,您会遇到问题。

【讨论】:

以上是关于Laravel刀片模板差异的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4刀片模板导致FatalErrorException?

laravel 刀片模板变量

清洁 Laravel 刀片模板文件的最佳方式是啥?

我可以从Laravel刀片模板登录吗?

Laravel 模板显示路线中的两个刀片模板

刀片模板中的Laravel重定向问题