如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?
Posted
技术标签:
【中文标题】如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?【英文标题】:How to set regular expression parameter constraints for Route::group in Laravel 4? 【发布时间】:2015-03-08 14:50:24 【问题描述】:对于简单的路线,我知道我可以使用where
声明。但是 Route::group() 前缀中的参数呢
<?php
Route::get('user/id', 'UserController@profile')->where('id', '[0-9]+');
Route::group(['prefix' => 'foo/bar'], function()
// ...
)->where('bar', '[0-9a-Z]+'); // this won't work
【问题讨论】:
【参考方案1】:我正在使用 laravel 5.5。我遇到了同样的问题,在搜索中找到了这个问题。
我尝试使用@lukasgeiter 定义的解决方案并遇到问题:
的价值
$group->getRoutes()
不仅是当前组的路线。
但是我通过在路由组定义中指定条件来解决我的问题。
Route::group([
'prefix' => 'foo/bar',
'where' => ['bar' => '[0-9a-Z]+']
],
function()
// ...
);
它对我有用:)
【讨论】:
这是您希望使用 Laravel 5/6 执行此操作的正确方法 - 确认它按说明工作。【参考方案2】:在我看来,一个可能不完美的解决方案是
// Route Model Binding
Route::model('user', 'User');
// Route Constraint Pattern
Route::pattern('user', '[0-9]+');
// Route Definition
Route::get('anything/user', 'UserController@anyFunction');
.
.
Route::resource('user', 'UsersController');
【讨论】:
【参考方案3】:开箱即用的 laravel 路由器不支持此功能。您可以使用 Jason Lewis 的 Enhanced Router 软件包或 fork that enables support for Laravel 4.2
您也可以自己动手。您基本上可以将 where 条件添加到组内的每个路由:
Route::group(['prefix' => 'foo/bar'], function()
Route::get('/', function()
// ...
)->where('bar', '[0-9a-Z]+');
);
或者让它更动态一点,并将其添加到你的路由组的底部:
Route::group(['prefix' => 'foo/bar'], function($group)
// ...
foreach($group->getRoutes() as $route)
$route->where('bar', '[0-9a-Z]+');
);
【讨论】:
以上是关于如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 4.2 中为每个公司创建目录(命名为 Today Date)并编写日志文件(命名为 CompanyName)
如何在 laravel 中为开发和生产使用不同的 cors 配置