首页 > 解决方案 > Laravel 路由相同的基本路径

问题描述

在 Larave 7 上,我有具有相同路径前缀的路由:

    /*
    |--------------------------------------------------------------------------
    | Parking Routes
    |-------------------------------------------------------------------------- */
    Route::resource('parkings', 'Api\Parking\ParkingController');
    Route::get('parkings/filters', 'Api\Parking\ParkingFilterController');

这样,parkings/filters返回404错误。

如果我颠倒路线的顺序:

    Route::get('parkings/filters', 'Api\Parking\ParkingFilterController');
    Route::resource('parkings', 'Api\Parking\ParkingController');

它工作正常,但有没有办法做一些更清洁的事情?喜欢极限parkings路线?

标签: laravellaravel-routing

解决方案


您的问题来自这样一个事实,即您资源丰富的控制器使用 GET 路由parkings/{parking},该路由然后匹配filters并优先于另一条路由。

您可以从资源丰富的控制器中排除路由

Route::resource('parkings', 'Api\Parking\ParkingController')->except([
    'show',
]);
Route::get('parkings/filters', 'Api\Parking\ParkingFilterController');

完整的文档在这里https://laravel.com/docs/7.x/controllers#restful-partial-resource-routes

如果您希望使用其他路由进行特定处理filters但仍需要其他路由,则可以向您的路由器添加一个全局模式,该模式将匹配所有对象{parking}except filters

https://laravel.com/docs/7.x/routing#parameters-global-constraints

Route::pattern('parking', '^(?!filters)([a-z0-9-_]+)$');

推荐阅读