pho*_*nix 11 global-variables shared-data inertiajs laravel laravel-jetstream
我想分享一些我发现的东西,因为那里没有太多信息(我找不到)。带有 Jetstream Inertia 的 Laravel 8 有一些共享对象,例如用户、当前路由……您可以使用 $page 变量在组件中访问它们。我需要添加一个菜单数组作为全局变量,但无法弄清楚,即使在官方 Inertia 文档中找到了一些信息。只是在 Laravel Jetstream 中有所不同。
直到我找到了 Laravel Jetstream 的共享数据中间件(ShareInertiaData),我才知道怎么做。
这是:
<?php
namespace App\Http\Middleware;
use Inertia\Inertia;
class ShareInertiaCustomData
{
public function handle($request, $next)
{
Inertia::share([
'menu' => config('menu'),
]);
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
protected $middlewareGroups = [
'web' => [
...
\App\Http\Middleware\ShareInertiaCustomData::class,
],
];
Run Code Online (Sandbox Code Playgroud)
我希望这会有所帮助,没有其他人需要花费数小时来解决这个问题。
感谢您分享这个!在执行您的步骤时,我确定了 class \App\Http\Middleware\HandleInertiaRequests,这是输入自己的页面道具的正确位置。您可以使用“共享”方法来添加您的属性。关于共享数据的 Inertia 文档也对此进行了解释。请看下面的例子。
/**
* Defines the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
* @param \Illuminate\Http\Request $request
* @return array
*/
public function share(Request $request)
{
return array_merge(parent::share($request), [
'current_topic' => Auth::user() ? Auth::user()->currentTeam->currentTopic : null
]);
}
Run Code Online (Sandbox Code Playgroud)
}
小智 1
感谢官方Discord 频道的人们,我发现我也遇到了同样的问题,因为我有一个旧版本的惯性 Laravel 包,它不包含共享功能。
确保您至少使用包含v0.3.0 的版本。