资源路由嵌套前缀之后无法访问 ['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 |
+--------+-----------+-----------------------------+---------+--------------------------------------------------------+--------------+
看看路由列表?
php artisan route:list
'update','edit','show','destroy' 这几个路由都是有 {id} 参数的,所以会导致将
api/order/address
匹配到 api/order/{id} 的资源路上,因为数据库里不存在 address 这个ID,所以就抛404将address 分组前置就可以了
注意这里的
article/{article}
,你的路由里花括号里都是空的……