一个 Laravel 上有两个独立的 Inertia.js 应用程序

问题描述 投票:0回答:2

Javascript 和 Laravel 大师您好。

我想知道是否可以在一个 Laravel 应用程序中创建两个独立的惯性.js 应用程序。

我正在制作一个 SaaS 风格的应用程序,其中将有一个前端部分和一个后台部分。 这将使用相同的 Laravel/Octane 应用程序分为两个域(或更多)。这有效。 但是,来自后台的 Ziggy 路线也会显示在前端应用程序中。

Ziggy 数据中包含的这些内容当然存在安全风险。此外,从管理部分传输路由会产生不必要的流量,因为路由会随着每个请求的惯性而传输。后台会比相对简单的前端有更多的路由。

知道如何构建这一结构,以便将 Ziggy 数据一分为二,同时它仍然是一个应用程序吗?

php laravel inertiajs
2个回答
1
投票

我认为这是不可能的,或者如果是的话,设置会太复杂,因为 Interia 依赖于 Laravel 路由,当你将 Laravel 传回 interia 时,你必须确定你要推送哪个 Inertia 应用程序数据。

我认为更好的方法是如果您需要多个域支持,则只创建域组路由,然后在前端创建一个持久布局,您可以将其用于公共/前端区域和管理区域。您可以将 Laravel Jetstream 与 Vue+Inertia 结合使用。

我真的不明白为什么你需要不同的前端应用程序,但如果你真的需要,我认为你最好为 API 路由设置 Laravel,这样你就可以为前端设置不同的应用程序。


0
投票

我最终在 HandleInertiaRequests 中间件中做到了这一点

 /**
 * Define the props that are shared by default.
 *
 * @return array<string, mixed>
 */
public function share(Request $request): array
{
    $ziggyObj = (new Ziggy)->toArray();

    if($request->host()!=config('app.admin_domain')) {
        $ziggyObj['routes'] =  array_filter(
            $ziggyObj['routes'],
            fn ($key) => !str_starts_with($key, 'admin'),
            ARRAY_FILTER_USE_KEY
        );
    }

    return array_merge(parent::share($request), [
        'auth' => [
            'user' => $request->user(),
        ],
        'ziggy' => function () use ($ziggyObj, $request) {
            return array_merge($ziggyObj, [
                'location' => $request->url(),
            ]);
        },
    ]);
}

因此,任何以“admin”开头的路由都不会发送到前端,除非它是“管理域”。 前端应用程序路由也会发送到后台,但我可能稍后会过滤掉它们。

© www.soinside.com 2019 - 2024. All rights reserved.