【问题标题】:Configuring third party service in my CompilerPass在我的 CompilerPass 中配置第三方服务
【发布时间】: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_nameattr_value,所以 var_dump 它。
  • @Sergio Ivanuzzo $container->get('application.exercise_html_purifier.config_configurator') 按计划返回我的服务实例

标签: php symfony dependency-injection


【解决方案1】:

好的,我已经阅读了\Symfony\Component\DependencyInjection\Dumper\XmlDumper::addService()的来源,发现其中一种解决方案是通过Definition而不是实例:

$container->getDefinition('exercise_html_purifier.config.default')
    ->setConfigurator([
        $container->getDefinition('application.exercise_html_purifier.config_configurator'),
        'configure'
    ]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多