假设我有三个刀片模板:A,B和C.模板A是全局布局,模板B是某个特定部分的布局,模板C是视图模板. 模板A和B期望分配称为内容的部分.该部分在视图模板(C)中定义. 这是模板A和B的简化版本:
模板A和B期望分配称为内容的部分.该部分在视图模板(C)中定义.
这是模板A和B的简化版本:
模板A:
<html> <body> @yield('content') </body> </html>
模板B:
@extends('template_a') @section('content') <div class="sidebar"> ... </div> <div class="content"> @yield('content') </div> @endsection('content')
如您所见,两个模板都输出了一个内容部分.我的问题是,在扩展B的视图中,它的内容被简单地忽略了.视图中定义的内容部分在模板A中出现的@yield(‘content’)上输出.
我想知道是否可以在视图层次结构中传播内容部分,即用模板C中定义的值替换模板B中的内容占位符,并将结果替换为模板A中的内容占位符.
对不起,如果我让这个声音太混乱了.我希望你明白我的想法.
提前致谢.
我在这里找到了你的问题的答案: 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
使用@endsection会导致生成的视图覆盖中间视图,但使用@overwrite会强制包含在视图中.
在我看来,令人困惑的是,在传统编程中,使用超类方法的指令进入子类(从子类调用超类方法),而在Laravel刀片继承中,它必须放在超类本身(超类声明它被覆盖时不能被忽略).