12

我想分享一些我发现的东西,因为那里没有太多信息(我找不到)。带有 Jetstream Inertia 的 Laravel 8 有一些共享对象,例如用户、当前路线……您可以使用 $page 变量在组件中访问它们。我需要添加一个菜单数组作为全局变量,但无法弄清楚,即使在官方 Inertia 文档中找到了一些信息。这在 Laravel Jetstream 中有所不同。

直到我找到了 Laravel Jetstream 的共享数据中间件(ShareInertiaData),我才知道该怎么做。

这是它:

  1. 在 app/Http/Middleware.php 中创建一个中间件。我打电话给我的 ShareInertiaCustomData。
<?php

namespace App\Http\Middleware;

use Inertia\Inertia;

class ShareInertiaCustomData
{
    public function handle($request, $next)
    {
        Inertia::share([
            'menu' => config('menu'),
        ]);

        return $next($request);
    }
}
  1. 放在app/Http/Kernel.php
    protected $middlewareGroups = [
        'web' => [
            ...
            \App\Http\Middleware\ShareInertiaCustomData::class,
        ],
    ];

我希望这会有所帮助,并且没有其他人将不得不花费数小时来解决这个问题。

4

2 回答 2

4

感谢分享这个!在完成您的步骤时,我确定了 class \App\Http\Middleware\HandleInertiaRequests,这是输入自己的页面道具的正确位置。您可以使用“共享”方法添加您的属性。这也在有关 Shared Data 的 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
    ]);
}

}

于 2021-02-23T09:08:33.567 回答
1

感谢官方Discord 频道的人,我发现我遇到了同样的问题,因为我有一个旧版本的惯性 Laravel 包,它不包含共享功能。

确保至少使用包含它的v0.3.0

于 2020-11-18T19:37:19.777 回答