如何解决Laravel 7路由组在一些相关路由上返回404
Route::group(['prefix'=>'cart'],function (){
Route::get('','CartController@index')->name('cart.index');
Route::get('{id}','CartController@create')->name('cart.create')->middleware('auth');
Route::any('update/{id}/{qty}','CartController@update')->name('cart.update')->middleware('auth');
Route::any('saveorder','CartController@store')->name('cart.store')->middleware('auth');
Route::any('delete/{rowId}','CartController@destroy')->name('item.delete')->middleware('auth');
Route::any('empty','CartController@empty')->name('cart.empty')->middleware('auth');
});
某些路线仍然有效,但是其中一些路线已损坏,即使存在该路线也返回404
断开的路线是:item.delete,cart.empty,cart.store
| auth:api |
| | GET|HEAD | cart | cart.index | App\Http\Controllers\CartController@index | web |
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | cart/delete/{rowId} | item.delete | App\Http\Controllers\CartController@destroy | web |
| | | | | | auth |
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | cart/empty | cart.empty | App\Http\Controllers\CartController@empty | web |
| | | | | | auth |
| | POST | cart/saveorder | cart.store | App\Http\Controllers\CartController@store | web |
| | | | | | auth |
| | PUT | cart/update/{id}/{qty} | cart.update | App\Http\Controllers\CartController@update | web |
| | | | | | auth |
| | GET|HEAD | cart/{id} | cart.create | App\Http\Controllers\CartController@create | web |
| | | | |
解决方法
如果您将GET方法与cart.empty
和cart.store
一起使用,则它们将由cart.create
处理,您应该将这些路线放在首位(顺序很重要),这样更好使用路由方法明确,而不要使用Route::any
Route::prefix('cart')->group(function () {
Route::get('','CartController@index')->name('cart.index');
Route::any('saveorder','CartController@store')->name('cart.store');
Route::any('empty','CartController@empty')->name('cart.empty');
Route::any('delete/{rowId}','CartController@destroy')->name('item.delete');
Route::any('update/{id}/{qty}','CartController@update')->name('cart.update');
Route::get('{id}','CartController@create')->name('cart.create');
});
,
Route::group(['prefix' => 'cart','middleware' => ['auth']],function(){
Route::get('/','CartController@index')->name('cart.index');
Route::get('/{id}','CartController@create')->name('cart.create');
Route::any('/update/{id}/{qty}','CartController@update')->name('cart.update');
Route::any('/saveorder','CartController@store')->name('cart.store');
Route::any('/delete/{rowId}','CartController@destroy')->name('item.delete');
Route::any('/empty','CartController@empty')->name('cart.empty');
});
,
Route::prefix('cart')->group(function (){
Route::middleware(['auth'])->group(function(){
Route::get('{id}','CartController@create')->name('cart.create');
Route::put('update/{id}/{qty}','CartController@update')->name('cart.update');
Route::post('saveorder','CartController@store')->name('cart.store');
Route::delete('delete/{rowId}','CartController@destroy')->name('item.delete');
Route::post('empty','CartController@empty')->name('cart.empty');
});
Route::get('/','CartController@index')->name('cart.index');
});
要考虑两件事。您的cart.index
可能与该路线下方的URI相匹配。为了安全起见,请尽量不要使用Route::any
。如https://laravel.com/docs/7.x/routing中所述。按照@Sobir的建议,运行php artisan route:list
并按照Laravel的意见查看实际的路由列表。
如果缺少某些东西或模棱两可,则可能必须重新考虑一些路由参数以避免混淆。或者以不同的方式将它们重新组合。您的路线清单肯定会增加。预测您将来要构建的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。