Laravel Blade 模板部分重复/缓存错误

Posted

技术标签:

【中文标题】Laravel Blade 模板部分重复/缓存错误【英文标题】:Laravel Blade Templates Section Repeated / cache error 【发布时间】:2013-09-10 15:54:04 【问题描述】:

我希望引导我的网站,因此,我已将常用的 twitter 引导组件放入刀片模板中。

sidebar.blade.php

@include('panel1')
@include('panel2')

panelTemplate.blade.php

<div class="panel panel-primary">   
    <div class="panel-heading">
        <div class="panel-title">
            @yield('title')
        </div>
    </div>
    <div class="panel-body">
            @yield('body')
    </div>
    <div class="panel-footer">
            @yield('footer')
    </div>
</div>

这样,每次我想使用面板时,我都可以使用@extends('panelTemplate')

panel1.blade.php

@extends('panelTemplate')
@section('title')
 title panel 1
@stop

@section('body')
 body panel 1
@stop

@section('footer')
 footer panel 1
@stop

panel2.blade.php

@extends('panelTemplate')
@section('title')
 title panel 2
@stop

@section('body')
 body panel 2
@stop

@section('footer')
 footer panel 2
@stop

我面临的问题是,不是显示panel1.blade.php 的内容,而是sidebar.blade.php 中声明的panel2.blade.php 的内容panel1.blade.php 的内容被重复(显示两次)。

Blade 是否缓存了请求,这就是 panel1 重复两次的原因?有没有办法覆盖这种行为,或者我是否以从未想过的方式使用刀片模板引擎?

【问题讨论】:

【参考方案1】:

您可以通过overwriting 部分来实现这一点。尝试您已经拥有的,但使用这两个更新的子视图:

panel1.blade.php

@extends('panelTemplate')

@section('title')
 title panel 1
@overwrite

@section('body')
 body panel 1
@overwrite

@section('footer')
 footer panel 1
@overwrite

panel2.blade.php

@extends('panelTemplate')

@section('title')
 title panel 2
@overwrite

@section('body')
 body panel 2
@overwrite

@section('footer')
 footer panel 2
@overwrite

它在这里已经过测试和工作,虽然我不确定它是否是 @overwrite 的预期用途,所以请彻底测试!

【讨论】:

优秀的答案!不幸的是,您的链接已损坏,我无法在文档中找到有关 @overwrite 的任何信息。很高兴答案就在这里! @samrap - 好了,链接更正了 :) - 它在 4.2 版中,你必须检查 Laravel 的 v5 .. 我认为 Laravel 的第 5 版中不存在相同的方法......你必须检查如何最好地实现你需要做的事情 - 最好的起点在这里:@987654322 @ 我使用的是 5.1,这个方法运行良好,奇怪的是它不在文档中。也许它已被弃用?

以上是关于Laravel Blade 模板部分重复/缓存错误的主要内容,如果未能解决你的问题,请参考以下文章

laravel-模板引擎Blade

Laravel 5.1 Blade模板引擎

请教laravel view 怎么显示 controller 中传递的对象值

为 Laravel Blade 模板解析字符串而不是文件

PHP笔记-laravel中Blade模板引擎的使用

使用 Blade/Mustache 模板混合 Laravel 和 Vue.Js