Symfony 4配置文件中嵌套参数跨文件引用失效问题
Symfony 4: 如何在配置文件中引用另一个配置文件的嵌套参数?
问题描述
我在自定义配置文件 config/config.yaml 里定义了嵌套的数据库配置:
# config/config.yaml (my custom configuration file) database: driver: pdo_mysql host: localhost user: dev password: dev dbname: dev
想要在 config/packages/doctrine.yaml 里引用这些参数来构建数据库URL,比如这样:
# config/packages/doctrine.yaml url: 'mysql://%database.user%:%database.password%@%database.host%:%database.port%/%database.dbname%'
但这种引用方式根本不生效,请问正确的引用方法是什么?
解决方案
核心问题是:Symfony只能引用定义在parameters节点下的配置项,你目前的database是根节点,不属于参数系统,所以无法通过%...%语法调用。按照下面的步骤调整即可:
调整自定义配置文件的结构
把database配置移动到parameters节点下,这样Symfony会把它识别为可引用的参数:# config/config.yaml parameters: database: driver: pdo_mysql host: localhost user: dev password: dev dbname: dev port: 3306 # 补充你URL中用到的port参数,默认MySQL端口是3306确保自定义配置文件被加载
在config/services.yaml中添加导入语句,让Symfony读取你的自定义配置:# config/services.yaml imports: # 保留原有的导入项,新增下面这行 - { resource: 'config.yaml' }在doctrine配置中正确引用参数
现在你就可以用点语法引用嵌套参数了,修改config/packages/doctrine.yaml:# config/packages/doctrine.yaml doctrine: dbal: url: 'mysql://%database.user%:%database.password%@%database.host%:%database.port%/%database.dbname%' # 其他DBAL相关配置...
这样配置后,Symfony就能正确解析这些嵌套参数,生成对应的数据库连接URL了。
内容的提问来源于stack exchange,提问作者Stephen Senkomago Musoke
相关产品推荐
相关产品推荐

