路线未定义 Inertia.js

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

在我的控制器中,我有一个重定向到路线的方法:

return Redirect::route('/management');

这是我的

routes/web.php
:

Route::get('/management', function () {
    return Inertia::render('Management');
});

但是,它会抛出错误,提示

Route [management] not defined

laravel vue.js inertiajs
2个回答
3
投票

Redirect::route()
方法需要一个命名路线,您尚未在
routes/web.php
文件中定义该路线。

为了使用命名路线,您需要将路线更改为:

Route::get('/management', function () {
    return Inertia::render('Management');
})->name('management'); // added

之后,您可以像这样重定向到 Inertia 中的命名路由:

return Redirect::route('management');

由于我们使用的是命名路由,而不是 URL,因此您不应在

/
调用中包含前导
route()


0
投票

如果您在 Laravel 项目中手动设置 Inertia(不使用预配置的样板),则可能会遇到在 JavaScript 中访问 Laravel 命名路由的问题。以下是确保您的路线正常运行的方法:

  1. 将 Ziggy 包添加到您的 Laravel 项目中。 Ziggy 允许在 JavaScript 中使用 Laravel 命名路由。
composer require tightenco/ziggy
  1. 在布局中使用@routes指令 在主布局文件(通常是 app.blade.php)中,包含 @routes 指令。这将生成 Laravel 路由的 JavaScript 版本。你的布局应该是这样的:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    
    <!-- Include Laravel routes in JavaScript -->
    @routes
    @viteReactRefresh
    @vite('resources/js/app.jsx')
    @inertiaHead
  </head>
  <body>
    @inertia
  </body>
</html>

常见问题 如果您发现 @routes 无法识别,而是呈现为纯文本,请尝试将其与括号一起使用,如下所示:

@routes()
© www.soinside.com 2019 - 2024. All rights reserved.