Laravel 7路由组在一些相关路由上返回404

时间:2020-08-28 18:36:26

标签: laravel routes http-status-code-404 laravel-routing laravel-7

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        |
|        |                                        |                         |                  |  

                                       

3 个答案:

答案 0 :(得分:0)

如果您将GET方法与cart.emptycart.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');
});

答案 1 :(得分:0)

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');
});

答案 2 :(得分:0)

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的意见查看实际的路由列表。

如果缺少某些东西或模棱两可,则可能必须重新考虑一些路由参数以避免混淆。或者以不同的方式将它们重新组合。您的路线清单肯定会增加。预测您将来要构建的东西。