使用@each的Laravel Blade,如何复制枚举的内部计数器

时间:2015-01-29 19:49:04

标签: php laravel laravel-4 laravel-5 blade

考虑以下视图partial:

@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>

在这种情况下,如何复制枚举计数器?

2 个答案:

答案 0 :(得分:1)

从源代码看,迭代器索引看起来像是$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,则可以在renderEach中查看Illuminate\View\Environment.php方法。如果您使用的是4.2或5.0,则renderEach方法位于Illuminate\View\Factory.php

答案 1 :(得分:0)

您可以改为使用@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