laravel - 如何防止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 调试器时,这里唯一的问题是它显示了类别查询的重复。
这是结果
如何避免这种循环查询?有正确的方法吗?
解决方案
您注册视图编辑器的方式(使用'*'
而不是特定的视图名称),它将compose
为每个渲染视图 + 子视图调用该方法。
你可以做的是代替这个:
view()->composer('*', GlobalVariable::class);
拥有这个:
\View::share('globCategory', \App\Models\Category::all());
这将全局共享您的类别(在视图内),并且只运行一次查询。
推荐阅读
- jquery - 仅当在确认框中单击“确定”时才更改日期选择器文本框值
- php - 如何使用 php 创建菜单树?
- python - 我正在获取一段代码的输出,但没有附加,因为不应该出现
- python - Conda 错误:无法链接不存在的源
- node.js - 将 Typescript 装饰器与 Parse SDK JS 一起使用
- node.js - 在对话流中使用 webhook 创建实体而不使用对话流 UI
- javascript - Slick Slider - 用点更改文本颜色
- javascript - Openlayers:在单个页面上使用 for 循环单击具有多个地图/视图的事件
- javascript - 尝试根据表单验证动态编辑 url
- java - 做“model.addAttribute()”和“session.setAttribute()”的区别