使用叶片中的@each将其他变量传递给部分变量

2022-08-30 21:21:41

从文档中可以看出,只能将 4 个参数传递给 。我不认为使用会有帮助。代码如下@each@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]);
}

并且仅在视图中可用。$varpartials.nav.categories


答案 2

我认为你是对的。将数据追加到$groupCategories是正确的方法。根据文档,第四个参数是如果$groupCategories为空时将显示的内容。您可以传递仅显示一次的视图样板,也可以传递任何以 raw 开头的文本|将按原样显示。

一般格式:

@each('viewfile-to-render', $data, 'variablename','optional-empty-viewfile')

第一个参数是要呈现的模板。这通常是部分的,就像你的名字ofyourblade.blade.php。

个是可迭代数据集,在你的例子中$groupCategories。

个是元素在迭代时将使用的变量名称。例如,在 foreach 中($data为 $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')

推荐