НашСамогон - самогонные аппараты, дубовые бочки, винные и турбо дрожжи, электроника и оборудование для производства алкоголя в домашних условиях.

Рекурсивные частицы Laravel Blade c @each

0

В этом уроке мы рассмотрим процесс реализации рекурсивных элементов в шаблонном движке Laravel Blade при помощи команды @each. Это позволит нам создавать структуры данных со случайным числом вложенных элментов, без необходимости знания максимальной глубины массива.

Данные

Данные, о которых я говорю –  данные как структуры папок, которые могут углубиться во многие уровни. В нашем случае, давайте представим, что мы имеем дело с заранее определенным набором “проектов” в приложении todo как Todoist. Не стесняйтесь прихватить выборочные данные из этой ссылки или кода ниже:

Старый добрый PHP

При использовании старого доброго PHP для вывода этих данных, можно было бы, вероятно, использовать такой метод:

Уф. Работает, но он крайне негибкий и смешивает вывод с логикой. Давайте не будем делать этого.

Blade Foreach

С Blade, все становится немного проще. Для помощи мы можем использовать конструкцию foreach.

Так как Blade на самом деле не поддерживает определяющих функций, таким образом, не позволяя нам называть их рекурсивно как вышеназванная функция output, мы должны определить элементы кода, называющиеся в:

  • partials/project.blade.php

  • partials/projects-none.blade.php

Но…Зачем столько много кода для столь элементарного. Неужели нет способа сократить это?

Blade @each

Существует не(до)документированная особенность Laravel Blade, которая поможет нам уничтожить подсчет LOC в наших файлах шаблонов, что облегчит жизнь нашим разработчикам и дизайнерам. Этой особенностью является @each и используется таким образом:

Первым аргументом является шаблон для визуализации. Это, как правило, элемент, как наш project.blade.php. Вторым является итерируемый набор данных, в нашем случае $projects. Третьим является переменное имя, которое элементы будут использовать будучи итерируемыми. Например, в foreach ($data as $element), этот аргумент будет element (без $). Четвертым аргументом является необязательный – это имя файла шаблона, который должен быть передан, когда второй аргумент ($data) пуст, т.е. там нечего итерировать. Если мы применим все это к нашему случаю, мы можем заменить весь этот блок:

с

1427031918indent

Вывод

В этом коротком уроке мы увидели, как можно использовать мало документированный Laravel Blade для резкого сокращения числа строк в коде шаблона. При использовании @each и опираясь на частицы и их способность рекурсивно называть себя, мы получаем удивительный арсенал инструментов в распоряжении для вывода всех видов данных –  это похоже на кладку строительных блоков в правильном порядке.

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

Знаете ли вы о @each? Знаете ли вы о каких-либо другие скрытых сокровищах? Расскажите нам в комментариях!

Поделиться:

Об Авторе