Javascript 和 Laravel 大师您好。
我想知道是否可以在一个 Laravel 应用程序中创建两个独立的惯性.js 应用程序。
我正在制作一个 SaaS 风格的应用程序,其中将有一个前端部分和一个后台部分。 这将使用相同的 Laravel/Octane 应用程序分为两个域(或更多)。这有效。 但是,来自后台的 Ziggy 路线也会显示在前端应用程序中。
Ziggy 数据中包含的这些内容当然存在安全风险。此外,从管理部分传输路由会产生不必要的流量,因为路由会随着每个请求的惯性而传输。后台会比相对简单的前端有更多的路由。
知道如何构建这一结构,以便将 Ziggy 数据一分为二,同时它仍然是一个应用程序吗?
我认为这是不可能的,或者如果是的话,设置会太复杂,因为 Interia 依赖于 Laravel 路由,当你将 Laravel 传回 interia 时,你必须确定你要推送哪个 Inertia 应用程序数据。
我认为更好的方法是如果您需要多个域支持,则只创建域组路由,然后在前端创建一个持久布局,您可以将其用于公共/前端区域和管理区域。您可以将 Laravel Jetstream 与 Vue+Inertia 结合使用。
我真的不明白为什么你需要不同的前端应用程序,但如果你真的需要,我认为你最好为 API 路由设置 Laravel,这样你就可以为前端设置不同的应用程序。
我最终在 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”开头的路由都不会发送到前端,除非它是“管理域”。 前端应用程序路由也会发送到后台,但我可能稍后会过滤掉它们。