如何在Laravel 4中为Route :: group设置正则表达式参数约束?

时间:2015-01-10 09:51:14

标签: regex laravel laravel-4 routes laravel-routing

对于简单路线,我知道我可以使用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

3 个答案:

答案 0 :(得分:7)

我正在使用laravel 5.5。我有同样的问题,并在搜索中找到这个问题 我试图使用@lukasgeiter定义的解决方案并遇到问题:
的价值 $group->getRoutes() 不仅是当前组的路线。

但我通过在路由组定义中指定条件来解决我的问题。

Route::group([
        'prefix' => 'foo/{bar}',
        'where'  => ['bar' => '[0-9a-Z]+']
    ],
    function() {

    // ...

});

它对我有用:)

答案 1 :(得分:6)

开箱即用的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]+');
    }
});

答案 2 :(得分:4)

在我看来,可能不完美的解决方案之一将是

// 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');