【问题标题】:Laravel Routes same base pathLaravel 路由相同的基本路径
【发布时间】:2020-08-30 17:34:06
【问题描述】:

在 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路线?

【问题讨论】:

    标签: laravel laravel-routing


    【解决方案1】:

    您的问题来自这样一个事实,即您的资源丰富的控制器使用 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 进行特殊处理,但仍需要其他路由,您可以向路由器添加一个全局模式,该模式将匹配除 filters 之外的所有内容与 {parking}

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

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

    【讨论】:

    • 我认为在引用控制器时也需要采取行动。
    • 好的,谢谢你的回答,事实上我需要show 路由,是的,全局模式看起来不错,但我有很多路由......我会检查并验证你的答案跨度>
    猜你喜欢
    • 2015-08-14
    • 2018-10-20
    • 2014-10-24
    • 2016-02-20
    • 1970-01-01
    • 2016-09-23
    • 2016-02-28
    • 2021-04-22
    • 2018-01-22
    相关资源
    最近更新 更多