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.