如何清理这段代码?使用 laravel 将每四个帖子插入一行

How to clean this code up? Insert every four posts into a row with laravel

我目前有这段代码:

<div class="row">
    <?php $i = 1; ?>
    @foreach($contest->submissions as $submission)
        <div class="col-md-3">
            <a href="/contests/{{ $contest->id }}/submissions/{{ $submission->id }}">
                {!! HTML::image('/images/' . $submission->filename) !!}
            </a>
        </div>
        @if($i % 4 == 0)
            </div><div class="row">
        @endif
    <?php $i++; ?>
    @endforeach
</div>

我一次将 4 个提交内容塞进一行,就像我在 wordpress 帖子中那样做。使用取模运算符检查余数。

尽管这段代码感觉真的很乱,但拼凑在一起。我正在使用 laravel 5 任何人都可以帮助进一步清理它并使它看起来更紧凑和更整洁吗?

您的代码没有任何问题,没有被黑客入侵的感觉,您只是以正常方式显示了一个集合。我可以建议一些更改,但没有绝对必要:

1. 摆脱 $i 变量的手动声明和递增,因为您已经可以从 [=14] 访问集合的索引=] 语句:

@foreach($contest->submissions as $i => $submission)
    ...
@endforeach

2. 为你使用 named route URL(这将使更改 URL 结构变得容易路线定义,避免为了改变它而遍历每一个使用它的地方):

Route::get('/contests/{contestId}/submissions/{submissionId}', ['as' => 'contest.submissions', ...]});

最终结果将如下所示:

<div class="row">
    @foreach ($contest->submissions as $i => $submission)
        <div class="col-md-3">
            <a href="route('contest.submissions', [$contest->id, $submission->id])">
                {!! HTML::image('/images/' . $submission->filename) !!}
            </a>
        </div>
        @if (($i + 1) % 4 == 0)
            </div><div class="row">
        @endif
    @endforeach
</div>

仅仅因为Laravel表达力和简洁性,并不意味着您可以用两行代码完成其中的所有事情。