gpt4 book ai didi

laravel - Blade : extending a template in multiple subviews

转载 作者:行者123 更新时间:2023-12-02 13:37:19 26 4
gpt4 key购买 nike

我正在使用 Blade 将多个 subview 包含到 Blade 应用程序的一组选项卡中。所有 subview 都具有相同的整体结构(侧边栏和主要部分)。因此,我创建了一个模板,每个 subview 都扩展了该模板。结构如下:

Main.blade.php

<div id="tabs">
<ul>
@foreach($views as $view)
<li><a href="#{{$view}}">{{$view}}</a></li>
@endforeach
</ul>
@foreach($views as $view)
<div id="{{$view}}">
@include($view)
</div>
@endforeach
</div>

template.blade.php

{{-- formatting stuff --}}
@yield('content 1')
{{-- more formatting stuff --}}
@yield('content-2')
{{-- more formatting stuff --}}

tab-*.blade.php

@extends('template')

@section('content-1')
This is tab [whatever number]
@stop

@section('content-2')
Lorem Ipsum
@stop

这里明显的问题是,由于每个 subview 都扩展相同的模板,@yield('content') 存在 3 次,并且所有 3 个包含的 subview 都有自己的 @section('内容')。似乎正在发生的情况是,第一个 subview 的内容部分的实现被放置在所有 3 个 yield 中。

我的意图很明显。我希望每个包含的 subview 实现它自己的模板实例,将其内容放在内容部分中,然后被拉到主页中。这可以吗?

如果我压平 tab-*.blade.php 文件并停止使用模板,它就可以正常工作。这里的问题是我最终得到了大量重复的代码,这些代码最好放在模板中。这是一个紧急选项,但我想以“正确”的方式进行。

注意

我试图重新设计它以避免这个问题,但我真的想不出另一个解决方案。虽然 @include 通常用于引入小的静态片段(页眉、页脚等),但我没有读过任何将其视为限制的内容。在我看来,最好的方法是将每个 View 存储一次,并在需要时将它们拉入主页,所以这就是我的设计方式。

最佳答案

尝试使用@overwrite命令而不是@stop

示例:

@extends('template')

@section('content-1')
Stuff goes here...
@overwrite

@section('content-2')
More stuff goes here...
@overwrite

来源:https://github.com/laravel/framework/issues/1058#issuecomment-17194530

关于laravel - Blade : extending a template in multiple subviews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25093731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com