gpt4 book ai didi

laravel - 如何在模板中重用 Blade 部分

转载 作者:行者123 更新时间:2023-12-04 01:59:35 27 4
gpt4 key购买 nike

我希望能够在一个 View 中多次重复部分内容,每次重复都有不同的内容。

部分是一个简单的面板,有一个标题和一些内容。每个面板中的内容的复杂程度可能各不相同,因此我希望能够使用 @section('content')传递数据的方法。

我的设置如下:

panel.blade.php - 要重复的部分。

<div class="panel">
<header>
@yield('heading')
</header>
<div class="inner">
@yield('inner')
</div>
</div>

view.blade.php - 重复部分的 View
@extends('default')

@section('content')

{{-- First Panel --}}
@section('heading')
Welcome, {{ $user->name }}
@stop
@section('inner')
<p>Welcome to the site.</p>
@stop
@include('panel')

{{-- Second Panel --}}
@section('heading')
Your Friends
@stop
@section('inner')
<ul>
@foreach($user->friends as $friend)
<li>{{ $friend->name }}</li>
@endforeach
</ul>
@stop
@include('panel')

@stop

我遇到了与此相同的问题: http://forums.laravel.io/viewtopic.php?id=3497

第一个面板按预期显示,但第二个面板只是第一个面板的重复。

我该如何纠正?如果这是完成这项工作的糟糕方法,那么更好的方法是什么?

最佳答案

对于 Laravel 5.4,Components & Slots可能对你有用。以下解决方案适用于 Laravel 4.x,也可能 <= 5.3。

在我看来,这是 @include 的一个愚蠢的用例。语法。您节省的 HTML 重新输入量可以忽略不计,尤其是因为其中唯一可能复杂的部分是 inner内容。请记住,需要进行的解析越多,应用程序的开销也越大。

另外,我不知道 @yield 的内部工作原理& @section功能,所以我不能说以这种方式工作你的包含有多“正确”。 Includes 通常使用 key => value 对作为参数传递给 include 调用:

@include('panel', ['heading' => 'Welcome', 'inner' => '<p>Some stuff here.</p>'])

不是打包一堆 HTML 的最理想的地方,但这是“设计”的方式(至少据我所知)。

也就是说...

使用 @section ... @overwrite "Other Control Structures" 中提到的语法模板文档页面的一部分。
@extends('default')

@section('content')

{{-- First Panel --}}
@section('heading')
Welcome, {{ $user->name }}
@overwrite
@section('inner')
<p>Welcome to the site.</p>
@overwrite
@include('panel')

{{-- Second Panel --}}
@section('heading')
Your Friends
@overwrite
@section('inner')
<ul>
@foreach($user->friends as $friend)
<li>{{ $friend->name }}</li>
@endforeach
</ul>
@overwrite
@include('panel')

@stop

关于laravel - 如何在模板中重用 Blade 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840775/

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