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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:17:08