2017-01-09 11 views
1

私はLaravel 5.3でBladeテンプレートを使用しています。私は、「友人」と「知人」の2つのリストを表示したい。リストのヘッダーとフッターはどちらの場合も同じですが、フレンドリストに表示されるアイテムは、知人リストに表示されるアイテムとは異なる書式とフィールドを持っています。ここで同じ親レイアウトの@eachディレクティブで異なる子ビューを使用する

は私のコントローラ内の2つの方法です。ここで

public function showFriends() { 
    return view('reports.friends', ['profiles' => $friends]); 
} 

public function showAcquaintances() { 
    return view('reports.acquaintances', ['profiles' => $acquaintances']); 
} 

は私の刃テンプレートです:

// reports/acquaintances.blade.php 
<div>Some generic header HTML</div> 
<div class="container"> 
    @each('reports.acquaintance', $profiles, 'profile') 
</div> 
<div>Some generic footer HTML</div> 

// reports/acquaintance.blade.php 
<div class="media"> 
    <div>Some HTML formatting specific to acquaintance item</div> 
    {{ $profile->name }} 
    {{ $profile->job }} 
</div> 

// reports/friends.blade.php 
<div>Some generic header HTML</div> 
<div class="container"> 
    @each('reports.friend', $profile, 'profile') 
</div> 
<div>Some generic footer HTML</div> 

// reports/friend.blade.php 
<div class="media"> 
    <div>Some HTML formatting specific to friend item</div> 
    {{ $profile->name }} 
    {{ $profile->birthday }}  
</div> 

これは、私が欲しいものを達成するための非常に効率的な方法ではないようですfriends.blade.phpとacquaintances.blade.phpという2つの同一の親テンプレートを作成しなければなりませんでした。私が本当に必要とするのは、汎用の親テンプレートを持ち、何らかの形でコントローラにリストアイテムを描画するために使用するテンプレートを指定する機能です。これは可能ですか?これを実装する別の、よりエレガントな方法はありますか?私はBladeの周りに頭を浮かべ始めています。どんなポインタも非常に高く評価されます。

答えて

1

persons_listと2つのカスタムアイテムに分けることができます。

public function showFriends() { 
    return view('reports.persons_list', ['profiles' => $friends, 'type' => 'friends']); 
} 

public function showAcquaintances() { 
    return view('reports.persons_list', ['profiles' => $acquaintances, 'type' => 'acquaintances']); 
} 

とブレード:

// reports/persons_list.blade.php 
<div>Some generic header HTML</div> 
<div class="container"> 

    @if ($type == 'friends') 

     @each('reports.friend', $profiles, 'profile') 

    @else 

     @each('reports.acquaintance', $profiles, 'profile') 

    @endif 

</div> 
<div>Some generic footer HTML</div> 
+0

おかげ@ serg-chernata次に条件付きリストの内部を使用しています。これは完璧な意味合いがあります。私はview()の呼び出しの中で直接使用したい子テンプレートを参照することができるかもしれないという曖昧な考えを持っていましたが、条件付きがそれを行う最もエレガントな方法であれば、そうしてください。 –

+0

大歓迎です。チャンスを得るたびに答えを受け入れてください。 :) –

関連する問題