Laravel 路由相同的基本路径

Posted

技术标签:

【中文标题】Laravel 路由相同的基本路径【英文标题】:Laravel Routes same base path 【发布时间】: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路线?

【问题讨论】:

【参考方案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 路由,是的,全局模式看起来不错,但我有很多路由......我会检查并验证你的答案跨度>

以上是关于Laravel 路由相同的基本路径的主要内容,如果未能解决你的问题,请参考以下文章

laravel6.0路由

laravel 制作自己的刀片文件路径

Laravel 路由 - 相同路由的自定义域

Laravel 根据哪个路径路由条件,如何获得正确的路径

laravel5.4学习--laravel基本路由

通过 Route::getRoutes() laravel 方法获取特定路径的路由