Laravel Blade 使用@each,如何复制枚举的内部计数器
Laravel Blade using @each, how to replicate enumerated internal counter
考虑以下部分视图:
@foreach($comments as $index => $c)
<tr{{ $index % 2 == 1 ? '' : ' class="row-color-alt"' }}>
<td>{{ $c->user->present()->avatar_and_name }}</td>
<td>{{ $c->body }}</td>
<td>{{ $c->added_on }}</td>
</tr>
@endforeach
在这里我可以轻松地迭代$comments
并且$index
将是一个枚举计数器。
但是如果我转换成@each
的用法,比如:
@each('comment.item', $comments, 'c', 'comment.empty')
在这种情况下,@each
将迭代 $comments
并每次包含视图 comment/item.blade.php
。视图中没有@foreach
,所以会是这样:
<tr>
<td>{{ $c->user->present()->avatar_and_name }}</td>
<td>{{ $c->body }}</td>
<td>{{ $c->added_on }}</td>
</tr>
在这种情况下如何复制枚举计数器?
您可以改用 @for
循环。
@for($i=0;$i<= count($comments);$i++)
<tr{{ $i % 2 == 1 ? '' : ' class="row-color-alt"' }}>
<td>{{ $comments[$i]->user->present()->avatar_and_name }}</td>
<td>{{ $comments[$i]->body }}</td>
<td>{{ $comments[$i]->added_on }}</td>
</tr>
@endforeach
从源代码来看,迭代器索引似乎已分配给 $key
变量。因此,您的 comment/item.blade.php
视图应该类似于:
<tr{{ $key % 2 == 1 ? '' : ' class="row-color-alt"' }}>
<td>{{ $c->user->present()->avatar_and_name }}</td>
<td>{{ $c->body }}</td>
<td>{{ $c->added_on }}</td>
</tr>
如果您使用的是 4.1,可以查看 Illuminate\View\Environment.php
中的 renderEach
方法。如果您使用的是 4.2 或 5.0,则 renderEach
方法位于 Illuminate\View\Factory.php
.
考虑以下部分视图:
@foreach($comments as $index => $c)
<tr{{ $index % 2 == 1 ? '' : ' class="row-color-alt"' }}>
<td>{{ $c->user->present()->avatar_and_name }}</td>
<td>{{ $c->body }}</td>
<td>{{ $c->added_on }}</td>
</tr>
@endforeach
在这里我可以轻松地迭代$comments
并且$index
将是一个枚举计数器。
但是如果我转换成@each
的用法,比如:
@each('comment.item', $comments, 'c', 'comment.empty')
在这种情况下,@each
将迭代 $comments
并每次包含视图 comment/item.blade.php
。视图中没有@foreach
,所以会是这样:
<tr>
<td>{{ $c->user->present()->avatar_and_name }}</td>
<td>{{ $c->body }}</td>
<td>{{ $c->added_on }}</td>
</tr>
在这种情况下如何复制枚举计数器?
您可以改用 @for
循环。
@for($i=0;$i<= count($comments);$i++)
<tr{{ $i % 2 == 1 ? '' : ' class="row-color-alt"' }}>
<td>{{ $comments[$i]->user->present()->avatar_and_name }}</td>
<td>{{ $comments[$i]->body }}</td>
<td>{{ $comments[$i]->added_on }}</td>
</tr>
@endforeach
从源代码来看,迭代器索引似乎已分配给 $key
变量。因此,您的 comment/item.blade.php
视图应该类似于:
<tr{{ $key % 2 == 1 ? '' : ' class="row-color-alt"' }}>
<td>{{ $c->user->present()->avatar_and_name }}</td>
<td>{{ $c->body }}</td>
<td>{{ $c->added_on }}</td>
</tr>
如果您使用的是 4.1,可以查看 Illuminate\View\Environment.php
中的 renderEach
方法。如果您使用的是 4.2 或 5.0,则 renderEach
方法位于 Illuminate\View\Factory.php
.