Laravel 7 Route Group在一些相关路线上返回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       | AppHttpControllersCartController@index                              | web        |
|        | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | cart/delete/{rowId}     | item.delete      | AppHttpControllersCartController@destroy                            | web        |
|        |                                        |                         |                  |                                                                        | auth       |
|        | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | cart/empty              | cart.empty       | AppHttpControllersCartController@empty                              | web        |
|        |                                        |                         |                  |                                                                        | auth       |
|        | POST                                   | cart/saveorder          | cart.store       | AppHttpControllersCartController@store                              | web        |
|        |                                        |                         |                  |                                                                        | auth       |
|        | PUT                                    | cart/update/{id}/{qty}  | cart.update      | AppHttpControllersCartController@update                             | web        |
|        |                                        |                         |                  |                                                                        | auth       |
|        | GET|HEAD                               | cart/{id}               | cart.create      | AppHttpControllersCartController@create                             | web        |
|        |                                        |                         |                  |  

如果您使用带有cart.emptycart.store的GET方法,那么它们将由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所看到的实际路线列表。

如果某个东西丢失或不明确,您可能需要重新考虑一些路线参数,以避免混淆。或者用不同的方式重新组合。你的路线列表肯定会增加。对你正在规划的未来以及你正在建设的东西进行预期。

最新更新