我正在使用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的警告:
DEPRECATED - 非静态方法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)
我做错了什么? 感谢。
答案 0 :(得分:0)
好的,我已经阅读了\Symfony\Component\DependencyInjection\Dumper\XmlDumper::addService()
的来源,发现其中一个解决方案是通过Definition
而不是实例:
$container->getDefinition('exercise_html_purifier.config.default')
->setConfigurator([
$container->getDefinition('application.exercise_html_purifier.config_configurator'),
'configure'
]);