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

Beh*_*dsh 3 regex routes laravel laravel-4 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
Run Code Online (Sandbox Code Playgroud)

Emi*_*efi 10

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

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

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

    // ...

});
Run Code Online (Sandbox Code Playgroud)

它对我有用:)


luk*_*ter 6

开箱即用的laravel路由器不支持此功能.您可以使用Jason Lewis 的Enhanced Router软件包或支持Laravel 4.2的分支

或者你可以自己做.您基本上可以将where条件添加到组内的每个路径:

Route::group(['prefix' => 'foo/{bar}'], function() {
    Route::get('/', function(){
        // ...
    })->where('bar', '[0-9a-Z]+');
});
Run Code Online (Sandbox Code Playgroud)

或者做得更动态,并在路由组的底部添加:

Route::group(['prefix' => 'foo/{bar}'], function($group) {
    // ...

    foreach($group->getRoutes() as $route){
        $route->where('bar', '[0-9a-Z]+');
    }
});
Run Code Online (Sandbox Code Playgroud)