Laravel 8 自定义路由在使用资源时返回 404

Posted

技术标签:

【中文标题】Laravel 8 自定义路由在使用资源时返回 404【英文标题】:Laravel 8 custom routes return 404 while using resource 【发布时间】:2021-09-04 12:53:19 【问题描述】:

API 端点 /clients/entries 在使用路由设置时返回 404 错误。

Route::apiResource('clients', ClientController::class);
Route::get('clients/entries', [ClientController::class , 'getAll']);

端点仅在重新排列时才起作用,因此资源路由在末尾。

Route::get('clients/entries', [ClientController::class , 'getAll']);
Route::apiResource('clients', ClientController::class);

为什么会出现这个问题?并且资源路由放在最后可以吗?

【问题讨论】:

你的第二种方法很好,这个可以帮到你***.com/a/62952620/15070659 @Espresso 感谢您的参考。现在我明白为什么会这样了。 【参考方案1】:

完整的解释可以在https://***.com/a/62952620/9004987 找到(感谢@Espresso)。

总结:

当资源路由一开始注册时,它会创建一些路由。示例:

GET   /clients/client   show   clients.show

并且当资源路由之后注册其他自定义路由(如/clients/entries)时,它会与资源URI冲突(因为它具有相同的模式)。

解决方案:

在资源路由之前定义自定义路由。

【讨论】:

【参考方案2】:

第一: 您需要将请求从 Routes/web.php 定向到 API

Route::get('/any', [App\Http\Controllers\ClientController::class, 'index'])->where('any','.*');

来自 routes/api.php 的请求需要回复

【讨论】:

以上是关于Laravel 8 自定义路由在使用资源时返回 404的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 8 中导入自定义字体

在 Laravel 8 中使用 API 路由时返回错误

laravel 兜底路由

如何从 Laravel 8 中的自定义 Web 路由中删除“api/”前缀?

Laravel 4:创建默认路由

路由资源更新和删除无法使用除存储 laravel 8 之外的多个角色