【发布时间】:2020-06-07 10:24:58
【问题描述】:
我已经准备好我的 CMS Bundle,它存储在我的私人存储库中,并通过 Composer 添加到 vendor 目录。
为什么绑定来自@MyBundle/Resources/config/services.yaml 的标量参数不起作用?我必须将它们复制粘贴到应用程序config/services.yaml。
请查看我的供应商捆绑包中的 services.yaml:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
bind:
$suffix: '%env(SUFFIX)%'
$loadBlocks: '%mmcms.load_blocks%'
和 app/config/services/yaml
services:
_defaults:
autowire: true
autoconfigure: true
bind:
$sender: Custom name
Psr\Log\LoggerInterface $appCrash: "@monolog.logger.appcrash"
当我在供应商捆绑服务中使用$suffix 时,它可以工作,但如果我想在我的应用服务的构造函数中自动装配它,它就不起作用。
得到一个错误:
Cannot autowire service "App\Mailer\MailerHelper": argument "$suffix" of method "__construct()" is type-hinted "string", you should configure its value explicitly.
我知道这个绑定,默认只针对这个特定的服务文件,所以范围是捆绑包。
是否有可能以某种方式处理它以便不复制粘贴绑定配置?
【问题讨论】:
-
考虑更新您的问题,显示您的两个服务文件的相关部分。没有理由将包中定义的参数绑定到应用程序中的值不起作用。可能是笔误。这是example。
-
@Cerad 我添加了代码示例。如文档中所示,您有提供者的链接,他们说这是本地绑定,这就是为什么它可能不起作用? SO local for vendor bundle 在应用程序中不起作用?
-
当然不是。 _defaults 下的任何内容仅适用于特定 services.yaml 文件中定义的服务。
-
没错,有没有一种很好的方法来解决这个问题而不是重复代码?
-
不鼓励在捆绑包中使用自动装配,因此从这个意义上说,没有什么需要修复的。另外,全局绑定似乎不是一个好主意。想象一下加载一个包并将其绑定到某个通用名称。可能会令人困惑。但是不,我想不出解决办法。怀疑在编译过程中绑定信息是否可用。
标签: symfony dependency-injection