Как почистить этот код? Вставьте каждые четыре сообщения в ряд с 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

Решение

В вашем коде нет ничего плохого, он не выглядит взломанным, вы просто отображаете коллекцию обычным способом. Я могу предложить пару изменений, но в них нет абсолютной необходимости:

1. Избавьтесь от ручного объявления и увеличения $i переменная, так как у вас уже есть доступ к индексу коллекции из foreach заявление:

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

2. Использовать именованный маршрут для вашего 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 выразителен и лаконичен, не означает, что в нем можно все сделать с помощью двух строк кода.


2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector