资源路由嵌套前缀之后无法访问 ['update','edit','show','destroy']

路由文件代码如下:

Route::group(['prefix' => 'api/order'], function () {
    Route::resource('/', 'OrderController', ['only' => ['index','store','show','update']]);
    Route::group(['prefix' => 'address'], function (){
        Route::get('/default', 'AddressController@defaultAddress');
        Route::resource('/', 'AddressController'); //['update','edit','show','destroy']
    });
});

在路由前缀'api/order'中的资源路由可以正常访问默认的方法;
但是在嵌套了一个前缀['prefix' => 'address']之后,第二个资源路由只能访问,index,create,update;访问['update','edit','show','destroy']都返回404

根据楼下回复,查看路由列表,发现路由时存在的

C:\Users\order\src>php artisan route:list
+--------+-----------+-----------------------------+---------+--------------------------------------------------------+--------------+
| Domain | Method    | URI                         | Name    | Action                                                 | Middleware   |
+--------+-----------+-----------------------------+---------+--------------------------------------------------------+--------------+
|        | POST      | api/order                   | store   | App\Http\Controllers\OrderController@store             | web          |
|        | GET|HEAD  | api/order                   | index   | App\Http\Controllers\OrderController@index             | web          |
|        | GET|HEAD  | api/order/address           | index   | App\Http\Controllers\AddressController@index           | web          |
|        | POST      | api/order/address           | store   | App\Http\Controllers\AddressController@store           | web          |
|        | GET|HEAD  | api/order/address/create    | create  | App\Http\Controllers\AddressController@create          | web          |
|        | GET|HEAD  | api/order/address/default   |         | App\Http\Controllers\AddressController@defaultAddress  | web          |
|        | GET|HEAD  | api/order/address/{}        | show    | App\Http\Controllers\AddressController@show            | web          |
|        | PUT|PATCH | api/order/address/{}        | update  | App\Http\Controllers\AddressController@update          | web          |
|        | DELETE    | api/order/address/{}        | destroy | App\Http\Controllers\AddressController@destroy         | web          |
|        | GET|HEAD  | api/order/address/{}/edit   | edit    | App\Http\Controllers\AddressController@edit            | web          |
|        | POST      | api/order/notify            |         | App\Http\Controllers\OrderController@notify            | web          |
|        | GET|HEAD  | api/order/operational       |         | App\Http\Controllers\OrderController@operationalRecord | web          |
|        | GET|HEAD  | api/order/order/admin/index |         | App\Http\Controllers\AdminController@index             | web,admin    |
|        | GET|HEAD  | api/order/{}                | show    | App\Http\Controllers\OrderController@show              | web          |
|        | PUT|PATCH | api/order/{}                | update  | App\Http\Controllers\OrderController@update            | web          |
|        | GET|HEAD  | api/user                    |         | Closure                                                | api,auth:api |
+--------+-----------+-----------------------------+---------+--------------------------------------------------------+--------------+
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

看看路由列表?
php artisan route:list

4年前 评论

'update','edit','show','destroy' 这几个路由都是有 {id} 参数的,所以会导致将api/order/address 匹配到 api/order/{id} 的资源路上,因为数据库里不存在 address 这个ID,所以就抛404

4年前 评论

将address 分组前置就可以了

4年前 评论
Young_Tao (楼主) 4年前
Young_Tao (楼主) 4年前
GeorgeKing (作者) 4年前
Route::resource("/article", "ArticleController");

PUT|PATCH | article/{article}      | article.update      | App\Http\Controllers\ArticleController@update

注意这里的 article/{article},你的路由里花括号里都是空的……

4年前 评论
Young_Tao (楼主) 4年前
GeorgeKing (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!