在@each指令中使用具有相同父布局的不同子视图

时间:2017-01-09 17:38:14

标签: php laravel blade

我在Laravel 5.3中使用了Blade模板。我想渲染两个列表 - 一个是“朋友”,一个是“熟人”。列表的页眉和页脚在两种情况下都是相同的,但在好友列表中呈现的项目与熟人列表中呈现的项目具有不同的格式和字段。

我的控制器中有两种方法:

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。我真正需要的是能够拥有通用父模板然后以某种方式在我的控制器中指定我想用来呈现列表项的模板。这可能吗?是否有另一种更优雅的方式来实现它?我刚刚开始关注Blade,任何指针都会非常感激。

1 个答案:

答案 0 :(得分:1)

您可以将其分解为通用persons_list和两个自定义项。然后在列表中使用条件:

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>