Symfony 6:能否全局定义routes.yaml的defaults与requirements?
解决Symfony 6中_locale路由参数全局配置的问题
当然可以全局定义_locale的默认值和规则,不用每个路由重复写,下面给你两种实用的方案:
方案1:通过路由导入统一配置
把所有带_locale的路由单独放到一个子路由文件(比如config/routes/translated_routes.yaml),然后在主routes.yaml里导入这个文件时,全局设置defaults和requirements:
步骤1:创建子路由文件
在config/routes/translated_routes.yaml里只保留路由的核心配置,去掉重复的defaults和requirements:
somepage1: path: /somepage1 controller: App\Controller\PageController::somepage1 somepage2: path: /somepage2 controller: App\Controller\PageController::somepage2
步骤2:主routes.yaml导入并全局配置
修改config/routes.yaml,导入子路由文件时加上全局的前缀、默认值和规则:
translated_routes: resource: ../config/routes/translated_routes.yaml prefix: /{_locale} defaults: _locale: en requirements: _locale: en|fr|de
这样所有导入的路由都会自动带上/{_locale}前缀,并且继承全局的_locale默认值和规则,新增路由直接写到子文件里就行,新增语言只需要修改主文件里的requirements规则。
方案2:使用路由组(YAML嵌套配置)
如果不想拆分文件,也可以在主routes.yaml里用嵌套的方式定义路由组:
translated_routes: defaults: _locale: en requirements: _locale: en|fr|de prefix: /{_locale} routes: somepage1: path: /somepage1 controller: App\Controller\PageController::somepage1 somepage2: path: /somepage2 controller: App\Controller\PageController::somepage2 # 后续新增路由直接加在这里
这种方式把所有需要_locale的路由都放到routes节点下,自动继承父节点的defaults、requirements和prefix,同样能实现全局统一配置的效果。
两种方案都能帮你避免重复配置,后续新增语言只需要修改一次全局的_locale规则即可。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

