首页 > 解决方案 > 如何防止laravel全局变量中的循环

问题描述

我在GlobalVariable.php里面创建了文件app\Composers

public function compose($view)
{
    $categories = \App\Models\Category::all();
    $view->with('globCategory', $categories);
}

然后注册到AppServiceProvider代码view()->composer('*', GlobalVariable::class);

我使用全局$globCategory来创建动态导航栏

<ul class="nav nav-tabs border-0 flex-column flex-lg-row">
    @foreach ($globCategory as $item)
        <li class="nav-item">
            <a href="{{ route('deal.category', ['category' => $item->slug]) }}" class="nav-link">{{$item->name}}</a>
        </li>
    @endforeach
</ul>

当我看到 laravel 调试器时,这里唯一的问题是它显示了类别查询的重复。

这是结果

在此处输入图像描述

如何避免这种循环查询?有正确的方法吗?

标签: laravel

解决方案


您注册视图编辑器的方式(使用'*'而不是特定的视图名称),它将compose为每个渲染视图 + 子视图调用该方法。

你可以做的是代替这个:

view()->composer('*', GlobalVariable::class);

拥有这个:

\View::share('globCategory', \App\Models\Category::all());

这将全局共享您的类别(在视图内),并且只运行一次查询。


推荐阅读