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

c9x0cxw0  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(138)

您好,Javascript和Laravel的大师。
我想知道是否可以在一个Laravel应用程序中创建两个独立的inertia.js应用程序。
我正在做一个SaaS风格的应用程序,其中将有一个前端部分和一个后台部分。这将分为两个域(或更多),使用相同的Laravel/辛烷应用程序。这工作。但是,从后台的曲折路线也显示在前端的应用程序。
当然,在Ziggy数据中包含这些路由也存在安全风险。从管理部分传输路由也会产生不必要的流量,因为路由是随着每个请求惯性传输的。后台将比相对简单的前端拥有更多的路由。
有没有什么想法可以结构化,使之吉数据分为两个,而它仍然是一个应用程序?

lskq00tm

lskq00tm1#

我不认为这是可能的,或者如果是的话,这将是太复杂的设置,因为Interia依赖于Laravel路由,当你把Laravel传递回Interia时,你必须确定你要推哪个惯性应用程序的数据。
我认为更好的方法是,如果你需要多域支持,只创建域组路由,然后在前端创建一个持久的布局,你可以使用公共/前端区域和管理区域。你可以只使用带有Vue+Inertia的Laravel Jetstream。
我真的看不出有什么理由你会需要不同的前端应用程序,但如果你真的这样做,我认为你最好只是设置Laravel的API路由,这样你就可以设置不同的应用程序的前端。

wwtsj6pe

wwtsj6pe2#

我最终在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”开头的路由都不会发送到前端,除非是“admin domain”。面向前端的应用程序路由也会发送到后台,但我可能稍后会将其过滤掉。

相关问题