在laravel blade 模板中 @each 在实现数据的循环时比@foreach更加的强大和优雅,但是常常被忽视了。

@foreach

假设现在你需要循环你的文章的所有评论。你可能会像下面这样写:

@if(count($article->comments) > 0) 
    @foreach($article->comments as $comment)
        @include('comments.item')
    @endforeach
@else
    @include('comments.no-items')
@endif

这看起来相当的乱,你可能会想到使用@forelse 来实现更好。

@forelse

@forelse($article->comments as $comment)
    @include('comments.item')
@empty
    @include('comments.no-items')
@endforelse

好些了但是仍然感觉有点乱,几乎所有的@forelse 我们都要包含@empty语句。我们可以使用@each 来仅用一条语句来实现这个循环。

@each

@each('comments.item', $article->comments, 'comment', 'comments.no-items')

就这样,没有条件判断没有缩进。 参数分别为:

  1. 循环的单个视图。
  2. 需要循环的数据。
  3. 赋予当前循环的变量。
  4. 当被循环的数据被空时被渲染的视图(可选项)。

因为视图部分的名字都具有描述性,一看就明白怎么回事,所以也就不需要@empty 这样的提示了