Циклы в шаблонизаторе Blade в Laravel

Шаблонизатора Blade в Laravel позволяет использовать не только примитивную логику для организации HTML кода вывода. Он ещё и обладает функционалом для создания циклом. Делается это с помощью директивы @foreach. Продемонстрируем его работу на примере:
@foreach ($ar as $el)
   <div>{{ $el }}</div>
@endforeach
Этот код выводит значения всех элементов массива "$ar". Как можно заметить логика синтаксиса очень похожа на конструкцию foreach в PHP. Используя тот же синтаксис, что и у PHP, можно привести пример вывода пары ключ-значение:
@foreach ($ar as $key => $el)
   <div>Ключ: {{ $key }}, значение: {{ $el }}</div>
@endforeach
Если массив использовался ассоциативный многомерный массив, то существует возможность обращения к элементу массива по ключу внутри этого цикла:
@foreach ($ar as $el)
   <div>Имя: {{ $el['name'] }}, возраст: {{ $el['age'] }}</div>
@endforeach
Цикл может комбинироваться в коде с другими директивами, к примеру с условиями:
@foreach ($ar as $key => $el)
   @if ($el > 0)
      <div>Ключ: {{ $key }}, значение: {{ $el }}</div>
   @endif
@endforeach
Но на этом комбинации не исчерпываются: можно даже использовать один цикл внутри другого для перебора многомерных массивов. Это часто используется при построении таблиц, для программирования вывода строк и ячеек:
@foreach ($arFirst as $keyFirst => $arSecond)
   @foreach ($arSecond as $keySecond => $elSecond)
      @if ($elSecond > 0)
         <div>
            Ключ из первого цикла: {{ $keyFirst }}<br>
            Ключ из второго цикла: {{ $keySecond }}<br>
            Значение из второго цикла: {{ $elSecond }}<br>
         </div>
      @endif
   @endforeach
@endforeach

Цикл for

Аналогично PHP, Blade умеет работать с простейшим циклом "for", у которого задан шаг, минимальное и максимальное значение:
@for ($i = 0; $i < 10; $i++)
   текущее значение переменной: {{ $i }}
@endforeach

Цикл forelse

Такой код будет выводить пару ключ-значение только если значение больше нуля. А с помощью такого кода можно выводить значение только есть массив не является пустым:
@if ( count($ar) )
   @foreach ($ar as $el)
      <div>{{ $el }}</div>
   @endforeach
@else
      <div>Массив пустой!</div>
@endif
Благодаря шаблонизатору Blade можно переписать этот код более компактно с помощью "@forelse", при этом не потеряв логики (код будет делать то же самое):
@forelse ($ar as $el)
      <div>{{ $el }}</div>
@empty
      <div>Массив пустой!</div>
@endforelse
"forelse" выполняет цикл только в том случае, если обходимый массив не является пустым. Если же он пустой, то выполняется директива "@empty", которая ставится после него.

Операции внутри цикла

Как и язык программирования PHP, шаблонизатор Blade умеет распознавать различные операции внутри цикла. К примеру, аналоги этих операций: "@break" (прерывает цикл) и "@continue" (приступает к следующей итерации цикла). Продемонстрируем их работу:
@foreach ($ar as $key => $el)
   @if ($el == 5)
      <div>Ключ: {{ $key }}, значение: {{ $el }}</div>
      <div>Прерываем цикл!</div>
      @break
   @endif

   @if ($el > 10)
      <div>Переходим к следующей итерации!</div>
      @continue
   @endif
@endforeach

Переменная $loop внутри цикла

Внутри циклов существует специальная переменная $loop. Она записывается не как директива, а именно переменная (со знаком доллара в начале). В значение этой переменной попадает текущий индекс цикла. С помощью неё можно узнать на какой итерации цикла сейчас находимся. Это делается так:
@foreach ($ar as $key => $el)
   @if ($loop->first)
      Это первая итерация
   @endif

   @if ($loop->last)
      Это последняя итерация
   @endif
@endforeach
Переменная $loop содержит несколько полезных свойств:
Свойство Описание
$loop->index Индекс текущей итерации цикла (начинается с 0).
$loop->iteration Текущая итерация цикла(начинается с 1).
$loop->remaining Число оставшихся итераций цикла.
$loop->count Общее число элементов итерируемого массива.
$loop->first Первая ли это итерация цикла.
$loop->last Последняя ли это итерация цикла.
$loop->depth Уровень вложенности текущего цикла.
$loop->parent Переменная loop родительского цикла, для вложенного цикла.
Если цикл вложенный, то к переменной $loop родительского цикла можно обратиться через свойство parent:
@foreach ($arFirst as $keyFirst => $arSecond)
   @foreach ($arSecond as $keySecond => $elSecond)
      @if ($loop->parent->first)
         Это первая итерация родительского цикла
      @endif
      @if ($loop->first)
         Это первая итерация сложенного цикла
      @endif
   @endforeach
@endforeach
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб