12

ビュー内でパーシャルを何度も繰り返し、それぞれの繰り返しで異なるコンテンツを使用できるようにしたいと考えています。

パーシャルは、見出しといくつかのコンテンツを含む単純なパネルです。@section('content')各パネル内のコンテンツは複雑さが異なる可能性があるため、データを渡す方法を使用できるようにしたいと考えています。

私が持っているセットアップは次のとおりです。

panel.blade.php - 繰り返されるパーシャル。

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

view.blade.php - パーシャルが繰り返されるビュー

@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

最初のパネルは意図したとおりに表示されますが、2 番目のパネルは単に最初のパネルの繰り返しです。

どうすればこれを修正できますか? これがこれを行うための貧弱な方法である場合、より良い方法は何でしょうか?

4

1 に答える 1

14

Laravel 5.4 では、コンポーネントとスロットが役立つ場合があります。次の解決策はLaravel 4.x用で、おそらく<= 5.3も同様です。


私の意見では、これは@include構文のばかげた使用例です。節約できる HTML の再入力の量はごくわずかです。特に、複雑になる可能性のある部分はinnerコンテンツだけであるためです。実行する必要がある解析が多いほど、アプリケーションのオーバーヘッドも増えることに注意してください。

@yieldまた、 &機能の内部の仕組みがわからない@sectionため、インクルードをこのように操作することが「適切」であるとは言えません。インクルードは通常、インクルード呼び出しでパラメーターとして渡されるキー => 値のペアを利用します。

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

大量の HTML をパックするのに最適な場所ではありませんが、これは「設計された」方法です (少なくとも私が知る限り)。

それは言った...

テンプレート ドキュメント ページの「その他の制御構造」@section ... @overwriteの部分に記載されている構文を使用します。

@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
于 2013-09-17T06:15:52.310 に答える