laravel - 如何声明对所有刀片文件可用的全局变量?
问题描述
我在数据库中有产品,这些产品基本上用于每个页面。不必查询数据库,而是这样:
$products = DB::table("products")->get();
然后将其传递到视图中:
return view("site.products", array(
'products' => $products,
));
我不想对每个视图都这样做。相反,我希望 $products 默认情况下可用于所有模板......这样我就可以这样做:
@foreach ($products as $product)
... etc
我将如何以全局方式声明它以实现这一目标?
解决方案
推荐的方法是添加一个中间件,将其应用于您想要影响的所有路由。
中间件
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\View;
class GlobalVariablesMiddleware
{
$myVariable = "Value For Everyone";
View::share(['globalValue' => $myVariable]);
}
将其添加到 Http 文件夹中的 kernel.php
protected $routeMiddleware = [
...
'myMiddleware' => \App\Http\Middleware\ GlobalVariablesMiddleware::class,
];
设置完成后,您可以轻松地将其应用于单个路线或分组路线,以实现您所寻找的
// Routes that will have the middleware
Route::middleware(['myMiddleware'])->group(function () {
// My first route that will have the global value
Route::resource('/profile', App\Http\Controllers\ProfileController::class);
// My second route that will have the global value
Route::resource('/posts', App\Http\Controllers\PostController::class);
});
通过这种方式,如果您选择不让数据全局化,您可以在未来轻松控制数据。
推荐阅读
- javascript - 将结果从嵌套的 .then 返回到另一个函数
- android - 为什么 Android 应用内更新总是返回 UPDATE_NOT_AVAILABLE 并且版本代码为 0?
- sql - 如何在 CosmosDB SQL 中查询嵌套数组中的字段
- git - MINGW64 (Git Bash) 交互式 rebase 打开一个奇怪的 Vim 版本?
- python - 如果数据框合并上的值相等,则在一行中追加列
- arm - 在符合 ABI 的 ARM 中的标签后是否需要冒号
- javascript - 通过对数组进行排序来确定数组是否有重复元素
- php - 在 PHP 中合并 pdf 文件并在其中保留网络链接
- java - 从具有颜色强度的双阵列创建图像
- php - 提交表单PHP MYSQL后出现空白页