Работа с циклами в шаблонизаторе Blade фреймворка Laravel

В данном уроке мы с вами разберем директиву @foreach шаблонизатора Blade, представляющую собой цикл для перебора массива, а также другие директивы для циклов.

Рассмотрим работу данной директивы на практическом примере. Пусть из действия в представление передается какой-то массив $arr.

Переберем этот массив циклом и выведем его элементы на экран:

@foreach ($arr as $elem) {{ $elem }} @endforeach

Давайте выведем каждый элемент массива в отдельном абзаце:

@foreach ($arr as $elem) <p>{{ $elem }}</p> @endforeach

Давайте выведем элементы нашего массива в виде списка ul:

<ul> @foreach ($arr as $elem) <li>{{ $elem }}</li> @endforeach </ul>

Передайте из действия в представление массив с числами. Выведите этот массив в виде списка ul.

Модифицируйте предыдущую задачу так, чтобы в пункты списка выводились квадраты элементов массива.

Модифицируйте предыдущую задачу так, чтобы в пункты списка выводились квадратные корни элементов массива.

Ключи массива

Можно также получить в отдельную переменную ключи массива, аналогично циклу foreach в PHP:

@foreach ($arr as $key => $elem) {{ $key }} {{ $elem }} @endforeach

Часто бывает так, что хотелось бы вывести рядом с элементами массива их порядковые номера, но не очень удобно то, что нумерация в массивах начинается с 0. Для решения проблемы можно просто прибавлять единицу на выводе ключа:

@foreach ($arr as $key => $elem) {{ $key + 1 }} {{ $elem }} @endforeach

Передайте из действия в представление массив со строками. Выведите этот массив в виде списка ul так, чтобы выводились и ключи, и значения элементов массива.

Модифицируйте предыдущую задачу так, чтобы на выводе к ключу прибавлялась единица.

Условие в цикле

Директиву @foreach можно комбинировать с директивой @if. Выведем, например, только положительные элементы массива:

<ul> @foreach ($arr as $elem) @if ($elem > 0) <li>{{ $elem }}</li> @endif @endforeach </ul>

А теперь, наоборот, выведем список только в том случае, если количество элементов в массиве больше нуля:

@if (count($arr) > 0) <ul> @foreach ($arr as $elem) <li>{{ $elem }}</li> @endforeach </ul> @endif

Передайте из действия в представление массив с числами. Выведите этот массив в виде списка ul. Сделайте так, чтобы в список попадали только элементы, значениями которых служат четные числа.

Из действия в представление передается переменная $data. Эта переменная может содержать массив с числами либо быть обычным числом. Если переменная $data - массив, то выведите элементы этого массива в виде списка ul, а если переменная $data - число, то выведите это число в абзаце.

Цикл в цикле

Пусть из действия в представление передается вот такой массив:

<?php $users = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; ?>

Давайте выведем элементы этого массива, используя вложенный друг в друга директивы @foreach:

@foreach ($arr as $subArr) @foreach ($subArr as $elem) {{ $elem }} @endforeach @endforeach

А теперь при выводе в представлении давайте из нашего массива сформируем HTML таблицу:

<table> @foreach ($arr as $subArr) <tr> @foreach ($subArr as $elem) <td>{{ $elem }}</td> @endforeach </tr> @endforeach </table>

В результате в браузер отправится вот такой HTML код:

<table> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>4</td> <td>5</td> <td>6</td> </tr> <tr> <td>7</td> <td>8</td> <td>9</td> </tr> </table>

Передайте из действия в представление массив с числами от 1 до 25. Выведите его в виде таблицы 5 на 5.

Многомерный массив

Пусть у нас дан вот такой массив с пользователями:

<?php $users = [ [ 'name' => 'user1', 'age' => 21, ], [ 'name' => 'user2', 'age' => 22, ], [ 'name' => 'user3', 'age' => 23, ], ]; ?>

Давайте выведем содержимое этого массива в виде списка ul:

<ul> @foreach ($users as $user) <li>{{ $user['name'] }} {{ $user['age'] }}</li> @endforeach </ul>

Передайте из действия в представление массив с работниками:

<?php $employees = [ [ 'name' => 'user1', 'surname' => 'surname1', 'salary' => 1000, ], [ 'name' => 'user2', 'surname' => 'surname2', 'salary' => 2000, ], [ 'name' => 'user3', 'surname' => 'surname3', 'salary' => 3000, ], ]; ?>

Выведите этот массив в виде списка ul.

Выведите массив из предыдущей задачи в виде таблицы table.

Переменная loop

По следующей ссылке изучите раздел Переменная Loop. Решите затем следующие задачи:

Из действия в представление передается массив со строками. Выведите элементы этого массива в виде списка ul. Сделайте так, чтобы перед значением элемента, выводился еще и порядковый номер итерации, начиная с 0.

Модифицируйте предыдущую задачу так, чтобы порядковый номер итерации начинался с 1.

Модифицируйте предыдущую задачу так, чтобы для первой li добавлялся CSS класс first, а для последней - класс last.

Из действия в представление передается массив с числами. Выведите каждый элемент этого массива в своем теге b. С помощью $loop->remaining три последних элемента массива выведите не в теге b, а в теге i.

Директивы @break и @continue

По следующей ссылке изучите работу с директивами @break и @continue.

Самостоятельно попробуйте работу изученных директив.

Цикл @forelse

В Blade также встроен интересный цикл @forelse, также перебирающий массивы. Работает он следующим образом: если в массиве есть элементы, то цикл их переберет, а если элементов нет, то выведет сообщение из блока @empty:

@forelse($arr as $elem) <p>{{ $elem }}</p> @empty <p>В массиве нет элементов</p> @endforelse

Самостоятельно попробуйте работу цикла @forelse.

Цикл @for

В Blade также встроен и цикл for:

@for ($i = 0; $i < 10; $i++) значение счетчика: {{ $i }} @endfor

С помощью цикла $@for выведите 10 абзацев, заполненных числами от 1 до 10.