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 路由相同的基本路径的主要内容,如果未能解决你的问题,请参考以下文章