刀片继承模板中的相同部分名称

Gon*_*afa 4 laravel blade laravel-blade

假设我有三个刀片模板:A,B和C.模板A是全局布局,模板B是某个特定部分的布局,模板C是视图模板.

模板A和B期望content分配一个被调用的部分.该部分在视图模板(C)中定义.

这是模板A和B的简化版本:

模板A:

<html>
  <body>
    @yield('content')
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

模板B:

@extends('template_a')

@section('content')
<div class="sidebar">
  ...
</div>
<div class="content">
  @yield('content')
</div>
@endsection('content')
Run Code Online (Sandbox Code Playgroud)

如您所见,两个模板都输出一个content部分.我的问题是,在扩展B的视图中,它的内容被简单地忽略了.content视图中定义的部分@yield('content')在模板A处输出.

我想知道是否可以content在视图层次结构中传播该部分,即用模板C中定义的值替换模板B中的内容占位符,并将结果替换为content模板A 中的占位符.

对不起,如果我让这个声音太混乱了.我希望你明白我的想法.

提前致谢.

Ron*_*Ron 11

我在这里找到了你的问题的答案:https://laracasts.com/discuss/channels/laravel/trouble-with-blade-section-inheritance?page = 1

诀窍是在包含同名@section内的@yield的刀片中使用@overwrite而不是@endsection.

@extends('app')
@section('content')
    {{--Some common code--}}
    @yield('content')
@overwrite
Run Code Online (Sandbox Code Playgroud)

使用@endsection会导致生成的视图覆盖中间视图,但使用@overwrite会强制包含在视图中.

在我看来,令人困惑的是,在传统编程中,使用超类方法的指令进入子类(从子类调用超类方法),而在Laravel刀片继承中,它必须放在超类本身中(超类声明它被覆盖时不能被忽略).