无论请求的资源如何,路由都返回 404 - Laravel/Inertis.js - 由路由排序引起

Route returning 404 regardless the resource being requested - Laravel/Inertis.js - caused by route ordering

我在web.php

中有这条路线
Route::get('crm/projects/add', [CRMController::class, 'addProject'])->name('crm.addProject')->middleware('auth');

这是在CRMControllerclass

public function addProject(){
    return Inertia::render('CRM/Projects/AddProjectPage');
}

无论资源如何,我都会告诉函数渲染它 returns 404

我确信该资源存在于 CRM/Projects/AddProjectPage 并且我已经尝试使用其他资源,这些资源在站点中也有工作链接所以它们肯定在那里而且它 returns 无论如何我都是 404

在 Vue 组件中这样引用路由

<inertia-link :href="route('crm.addProject')">
    Add Project
</inertia-link>

我一定是遗漏了一些明显的东西,多一双眼睛会有所帮助,提前谢谢你

编辑: 控制台中的错误是

Failed to load resource: the server responded with a status of 404 (Not Found) projects/add:1

编辑: php artisan route:list

的输出
|        | GET|HEAD | crm/projects/add                                      | crm.addProject        | App\Http\Controllers\CRMController@addProject               | web        

也许是显而易见的事情,但你试过了吗运行

php artisan clear-compiled 
composer dump-autoload
php artisan optimize 

并确保在使用 Inertia 和 Laravel.

时有 npm run watch 运行

您可以尝试使用下面的 运行 php artisan 命令来使用 Ziggy

生成路由
php artisan ziggy:generate

它将在此处存储您生成的路线

resources/js/ziggy.js

参考:https://github.com/tighten/ziggy

由于代表我提供的信息不充分而无法解决的问题是路线排序

这条路线

Route::get('crm/projects/{project:id}', [CRMController::class, 'editProjectPage'])->name('crm.project')->middleware('auth');

之前声明过

Route::get('crm/projects/add', [CRMController::class, 'addProject'])->name('crm.addProject')->middleware('auth');

所以由于路由解析是有序的事情,它给我带来了问题,我会说最好的做法是让所有路由都检查传递的参数 after 你的其他路由没有接受参数

像这样

Route::get('crm/projects/add', [CRMController::class, 'addProject'])->name('crm.addProject')->middleware('auth');

Route::get('crm/projects/{project:id}', [CRMController::class, 'editProjectPage'])->name('crm.project')->middleware('auth');