在我的CompilerPass中配置第三方服务

时间:2015-11-17 16:15:16

标签: php symfony dependency-injection

我正在使用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)

我做错了什么? 感谢。

1 个答案:

答案 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'
    ]);