在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')
就这样,没有条件判断没有缩进。 参数分别为:
- 循环的单个视图。
- 需要循环的数据。
- 赋予当前循环的变量。
- 当被循环的数据被空时被渲染的视图(可选项)。
因为视图部分的名字都具有描述性,一看就明白怎么回事,所以也就不需要@empty 这样的提示了