【发布时间】:2015-11-17 16:15:16
【问题描述】:
我正在使用 Symfony 2.7,我想通过添加配置器来配置一些服务。我按照http://symfony.com/doc/current/components/dependency_injection/configurators.html 上的说明进行操作,但我想在我的 CompilerPass 中将我的配置器添加到该服务。 我写了以下代码:
$container->getDefinition('exercise_html_purifier.config.default')
->setConfigurator([
$container->getDefinition('application.exercise_html_purifier.config_configurator')->getClass(),
'configure'
]);
application.exercise_html_purifier.config_configurator 是我的配置器服务的id。这段代码按预期工作,但当然它也触发了 php 的警告:
已弃用 - 不应静态调用非静态方法 Application\Service\ExerciseHTMLPurifier\Configurator\ConfigConfigurator::configure(),假设 $this 来自不兼容的上下文
因为在我的情况下,configure 方法不是静态的。我不知道如何告诉 symfony 设置非静态配置回调。
我试着这样设置:
$container->getDefinition('exercise_html_purifier.config.default')
->setConfigurator([
$container->get('application.exercise_html_purifier.config_configurator'),
'configure'
]);
但出现此错误:
XmlDumper.php 第 201 行中的 ContextErrorException: 警告:DOMElement::setAttribute() 期望参数 2 是字符串,给定对象
我什至尝试使用以下语法:
$container->getDefinition('exercise_html_purifier.config.default')
->setConfigurator([
'@application.exercise_html_purifier.config_configurator',
'configure'
]);
但也有错误
appDevDebugProjectContainer.php 第 2992 行中的 FatalErrorException: 解析错误:语法错误,意外的“@”,需要标识符 (T_STRING)
我做错了什么? 谢谢。
【问题讨论】:
-
看起来你的
$container->get('application.exercise_html_purifier.config_configurator')返回了一些错误的东西并将这个东西传递给净化器。DOMElement::setAttribute()需要attr_name和attr_value,所以 var_dump 它。 -
@Sergio Ivanuzzo $container->get('application.exercise_html_purifier.config_configurator') 按计划返回我的服务实例
标签: php symfony dependency-injection