【问题标题】:Route returning 404 regardless the resource being requested - Laravel/Inertis.js - caused by route ordering无论请求的资源是什么,路由都返回 404 - Laravel/Inertis.js - 由路由排序引起
【发布时间】:2021-10-04 03:05:31
【问题描述】:

我在web.php有这条路线

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

这是在CRMController 类中

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

无论我告诉函数渲染它的资源是什么,它都会返回 404

我很肯定该资源存在于CRM/Projects/AddProjectPage,并且我已尝试使用其他资源,这些资源在站点中也有工作链接,因此它们肯定存在,并且无论如何它都会返回 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 route:list 使用该命令获取所有路由列表
  • @Shailendra 将相关输出添加到问题
  • 你是否检查过这里的 href 值是什么,其他 auth get 路由是否运行良好或只有这条路由出错跨度>
  • @Shailendra 它呈现给&lt;a href="https://www.britevisual.com/crm/projects/add"&gt;Add Project&lt;/a&gt;,是的,所有其他auth 路由都可以正常工作,包括用于在其他地方添加不同模型的路由/资源过程,这是一个副本

标签: laravel laravel-8 inertiajs


【解决方案1】:

也许很明显,但你试过跑步吗

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

并确保在使用 Inertia 和 Laravel 时运行 npm run watch

【讨论】:

  • 这些命令没有解决我的问题,感谢您的尝试
  • javatpoint.com/npm-clear-cache 也许这会有所帮助?我认为它更像是一个 npm 问题而不是逻辑问题的唯一原因是因为你的控制器/路由/资源在我看来都是正确设置的。
  • 清除缓存也没有解决它,控制器/路由/资源进程正确设置,因为它是用于在其中添加另一个模型实例的现有进程的副本CRM,这是非常奇怪的行为,如果您有更多想法,我感谢您的帮助,请分享
【解决方案2】:

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

php artisan ziggy:generate

它将您生成的路线存储在这里

resources/js/ziggy.js

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

【讨论】:

  • 谢谢,但问题不在于路线,而是未能在被告知的位置找到资源或任何资源
  • @LiamO'Toole 如果您的路线在那里,您是否已经检查了您的resources/js/ziggy.js
  • Ziggy 被声明为 vue 应用程序的基本 html 中的指令,因为这就是 Inertia 的工作方式,没有 resources/js/ziggy.js,我相信它不会解决问题,再次感谢尝试
  • 您是否将 @routes Blade 指令添加到您的主布局中(在您的应用程序的 JavaScript 之前)?
  • 是的,这就是我在上一条评论中所指的内容,这是一个大网站,有很多其他部分以类似的方式工作,这只是一个有问题的例子,我看不到它是什么
【解决方案3】:

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

这条路线

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');

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

像这样

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');

【讨论】:

  • 啊,是的,我以前也遇到过这种问题,为了消除这种问题,我建议使用Route Groups,快乐编码:)
  • @JasonMigz 感谢您的帮助,祝您有美好的一天:)
猜你喜欢
  • 2020-08-26
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 2015-10-25
相关资源
最近更新 更多