Laravel Jetstream Inertia 共享全球应用数据

Posted

技术标签:

【中文标题】Laravel Jetstream Inertia 共享全球应用数据【英文标题】:Laravel Jetstream Inertia Shared Global App Data 【发布时间】:2021-02-27 02:49:35 【问题描述】:

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

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

这里是:

    在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);
    

    放在app/Http/Kernel.php中
    protected $middlewareGroups = [
        'web' => [
            ...
            \App\Http\Middleware\ShareInertiaCustomData::class,
        ],
    ];

我希望这会有所帮助,没有其他人需要花费数小时来解决这个问题。

【问题讨论】:

感谢@phoenix 发布此消息。我花了一个小时试图弄清楚这一点! Jetstream 和 Inertia 之间的文档在这方面存在明显的差距。将其作为问题发布,然后按照通常的堆栈溢出标准发布问题的答案可能是个好主意,因为版主可能不喜欢目前的方式,如果他们删除它,这对于任何想做同样事情的人来说都是非常重要的信息。 【参考方案1】:

感谢分享!在完成您的步骤时,我确定了 \App\Http\Middleware\HandleInertiaRequests 类,这是输入自己的页面道具的正确位置。您可以使用“共享”方法添加您的属性。这也在Inertia documentation about Shared Data 中进行了解释。请看下面的示例。

/**
 * 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
    ]);

【讨论】:

谢谢。事实证明,在我提交本教程几天后,我的问题很快得到了解决。看看@ben.horvath 的回答是什么 你是绝对正确的。 Ben 已经提到了分享功能。【参考方案2】:

感谢官方Discord channel的人,我发现我遇到了同样的问题,因为我有一个不包含分享功能的older version of the inertia-laravel package。

确保在包含它的地方至少使用v0.3.0。

【讨论】:

根据github.com/laravel/jetstream/pull/371,我认为您需要使用(尚未发布的)jetstream 2.x 分支才能使惯性 Laravel 0.3.0 正常工作。对于当前发布的 Jetstream 1.x 分支,我们坚持使用惯性 Laravel 0.2.4

以上是关于Laravel Jetstream Inertia 共享全球应用数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Jetstream Inertia 共享全球应用数据

如何将 Vuetify 3 添加到 Laravel 8 Jetstream + 惯性

Laravel 8 - Jetstream +惯性.js - Vue开发工具不起作用

初始安装后在 Laravel Jetstream 中安装 Teams 支持

对惯性响应和 json 响应使用相同的方法 Laravel Jetstream

在我的 Inertia laravel 应用程序中获取 View [app] not found 错误