Symfony 5可复用Bundle配置TreeBuilder报路径类型不匹配错误求助
错误原因
报错的核心是TreeBuilder配置和实际YAML结构不匹配:你在authentication数组节点下调用了arrayPrototype()方法,该方法用于定义「索引数组类型的配置节点,所有子元素遵循相同结构规则」,相当于要求authentication下是多个同结构的认证配置集合。
而你实际写的YAML中authentication是关联数组,仅包含单组认证属性,配置解析器会把email等键识别为索引数组的下标,自然就会要求对应值为数组,收到字符串就触发了类型错误。
解决方案
根据你的业务需求选择对应方案即可:
方案1:仅需要单组认证配置(匹配你当前YAML写法)
直接删除arrayPrototype()调用即可,修改后的TreeBuilder代码如下:
$treeBuilder = new TreeBuilder('bayard_directus'); $treeBuilder->getRootNode() ->children() ->arrayNode('authentication') ->children() ->scalarNode('email')->defaultValue("%env(PEE_CMS_API_MAIL)%")->end() ->scalarNode('password')->defaultValue("%env(PEE_CMS_API_PWD)%")->end() ->scalarNode('cache')->defaultValue('PSR-6')->end() ->end() ->end() ->scalarNode('base_url')->defaultValue("%env(PEE_CMS_API_URL)%")->end() ->end() ; return $treeBuilder;
修改后你现有的YAML配置不需要做任何调整即可正常解析。
方案2:需要支持多组认证配置
如果业务场景要求可配置多个认证账号,保留arrayPrototype()的写法,调整YAML配置为索引数组格式即可:
bayard_directus: authentication: - email: '%env(PEE_CMS_API_MAIL)%' password: '%env(PEE_CMS_API_PWD)%' cache: "PSR-6" base_url: '%env(PEE_CMS_API_URL)%'
该场景下解析得到的authentication配置会是二维数组,可直接遍历使用多组账号信息。
内容的提问来源于stack exchange,提问作者del pozo
相关产品推荐
相关产品推荐

