Передача дополнительной переменной в частичное использование @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, то может быть частичное - при том понимании, что это будет одно и то же значение при каждом включении частичного.

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