2014-01-16 67 views
6

我主要布局模板/views/web/main_lo.blade.php作为Laravel刀模板差异

<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,这里第一节-1这是相当清楚该子部分将包含父节1,并且父节中的内容也将被打印。

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

“请注意,观点延伸刀片布局简单地从布局覆盖部分 。”

,然后有使用@overwrite这也是用于替换父节的内容重写第

+1

好问题。一些指导在这里:http://laravel-recipes.com/recipes/244 –

回答

4

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

部分实际上是以相反的顺序延伸的,首先定义的部分将是孩子,后面的部分将是父亲。所以@parent实际上是包含可能会出现的部分的内容。
这就是为什么我认为父母和孩子不是这个系统的最佳条件。

由于传统用例 - 布局 - 这看起来像布局部分是首先定义的布局部分。但实际上,他们在内容部分渲染后运行。

这意味着@overwrite实际上与父节,而不是孩子一起使用。在你的例子中,这样做没什么意义,因为你也在布局中产生(@show),这意味着你不想在那里覆盖。

原因实际上是因为@overwrite是针对传统用例较少的情况,而不是当您有布局内容的父子关系时。
大多数情况下,当您包含一些部分文件时(可能遍布整个地方),使用相同部分名称时会发生这种情况,并且在先前定义的部分是显示而不是稍后显示的部分时遇到问题。