You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何为带可变前缀的路由组添加where参数约束?

问题错误根源

你当前写法的报错原因是Route::prefix()->group()方法的返回值为null,无法在group()之后链式调用where()方法,参数校验规则需要在路由组声明完成前绑定到前缀参数上,调整调用顺序即可。

正确实现代码

写法1:链式调用(推荐)

将where()方法放在group()之前调用,保证所有方法都作用在路由组实例上:

Route::prefix('{hl}')
    ->where('hl', 'en|pl')
    ->group(function () {
        Route::get('/test-1', function () {
            return 'OK-1';
        });

        Route::get('/test-2', function () {
            return 'OK-2';
        });
    });

写法2:数组配置路由组

如果路由组需要同时配置多组属性,可以用数组形式统一声明:

Route::group([
    'prefix' => '{hl}',
    'where' => ['hl' => 'en|pl']
], function () {
    Route::get('/test-1', function () {
        return 'OK-1';
    });

    Route::get('/test-2', function () {
        return 'OK-2';
    });
});
参数使用说明

路由匹配成功后,你可以直接在路由闭包或者控制器方法中注入$hl参数获取当前匹配的前缀值:

Route::get('/test-1', function (string $hl) {
    return '当前语言版本:' . $hl;
});

以上两种写法都会生成你预期的/{hl}/test-1和/{hl}/test-2路由,且仅当hl参数值为en或pl时才会匹配成功。

内容的提问来源于stack exchange,提问作者Jakub Muda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:54:02