如何在 Laravel 中使用正则表达式路由前缀?

Posted

技术标签:

【中文标题】如何在 Laravel 中使用正则表达式路由前缀?【英文标题】:How to Use Regex to Route Prefix in Laravel? 【发布时间】:2019-04-04 07:04:33 【问题描述】:

简介:

我有一个带有动态前缀的自定义路由组:

Route::prefix('nickname')->group(function () 
    Route::get('/', function($nickname) 
        return view('profile');
    )->where(['nickname' => '[a-z]+']);

    Route::get('/edit', function($nickname) 
        return view('profile.edit');
    )->where(['nickname' => '[a-z]+']);
);

如您所见,在每条路线上,我通过正则表达式检查前缀的正确性。

注意:我也用->where(['nickname' => '[a-z]+'])来路由组,结果报错了。

错误信息:

在 null 上调用成员函数 where()

问题:

如何解决只检查一次的问题?

【问题讨论】:

【参考方案1】:

使用这个希望它会帮助你

Route::group(['prefix' => 'nickname','where' => ['nickname' => '[a-z]+']],function ($nickname) 

    Route::get('/', function($nickname) 
        return view('profile');
    );

    Route::get('/edit', function($nickname) 
        return view('profile.edit');
    );

);

【讨论】:

我先尝试了这个方法,然后问了一个问题。 @Shaielndra Gupta 当前方法返回Call to a member function where() on null【参考方案2】:

Route::group 具有 attributes 参数。可用参数之一是where

Route::group([
    'prefix' => 'nickname',
    'where' => ['nickname' => '[a-z]+']
], function ($nickname) 
    Route::get('/', function($nickname) 
        return view('profile');
    );
    Route::get('/edit', function($nickname) 
        return view('profile.edit');
    );
);

More about Laravel routes here

【讨论】:

以上是关于如何在 Laravel 中使用正则表达式路由前缀?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.2 正则表达式路由约束,失败

Laravel 5 路由过滤器正则表达式

nginx 路由配置

Laravel - 正则表达式路由匹配所有内容,但不完全匹配一个或多个单词

如何在 AWS S3 生命周期过期前缀规则中使用正则表达式

如何从 Laravel 8 中的自定义 Web 路由中删除“api/”前缀?