Передача дополнительной переменной в частичное использование @each в лезвии
Из документации к @each
можно передать только 4 параметра. Я не думаю, что использование @include
поможет. Код ниже
@each('partials.nav.categories', $groupCategories, 'parent')
Мне нужно отправить дополнительную переменную для использования в частичном partials.nav.categories
. Эта переменная не содержится в массиве $groupCategories
.
Есть ли способ отправить эту дополнительную переменную через или добавить ее к каждому элементу массива partials.nav.categories
?
Спасибо
Ответы
Ответ 1
Вы можете использовать переменную с вашего контроллера
view()->share('key', 'value');
Это значение будет доступно во всех ваших представлениях.
Или вы можете создавать композиторы представлений именно для этого вида.
public function yourmethod()
{
view()->composer('partials.nav.categories', function($view) {
$view->with('var', 'value');
});
return view('path.to.view', ['groupCategories' => $categories]);
}
И $var
будет доступен только в представлении partials.nav.categories
.
Ответ 2
Я думаю, что ты прав. Добавление данных в $groupCategories - правильный путь. Согласно документации, четвертый параметр - это то, что будет отображаться, если $groupCategories пуст. Вы можете либо пройти шаблон представления, который будет показан только один раз, либо любой текст, добавленный с помощью raw | будет отображаться как есть.
Общий формат:
@each('viewfile-to-render', $data, 'variablename','optional-empty-viewfile')
Аргумент first - это шаблон для рендеринга. Обычно это будет частичным, например, ваше имя.
второй - это итерируемый набор данных, в вашем случае $groupCategories.
Третий - это имя переменной, которое элементы будут использовать при повторении. Например, в foreach ($ data as $element) этот аргумент будет элементом (без $).
Аргумент четвертый является необязательным - это имя файла шаблона, которое должно отображаться, когда второй аргумент ($ data) пуст, т.е. не имеет ничего, чтобы перебрать. Если мы применим все это к нашему случаю, мы можем заменить весь этот блок:
@if (count($groupCategories) > 0)
<ul>
@foreach ($groupCategories as $parent)
@include('partials.nav.categories', $parent)
@endforeach
</ul>
@else
@include('partials.group-none')
@endif
с
@each('partials.nav.categories', $groupCategories, 'parent', 'partials.group-none')
Ответ 3
Вам нужно передать только частичный экземпляр, переменные, которые изменяются при каждом использовании частичного.
Код внутри самого частица может получить доступ к чему-либо, что находится в области родителя.
Итак, если, например, основной вид может использовать $user, то может быть частичное - при том понимании, что это будет одно и то же значение при каждом включении частичного.
Не уверен, что это помогает, поскольку вы не говорите, если дополнительный параметр должен отличаться для каждого включения частичного.