【问题标题】:Symfony compiler pass: I want to add method call to Logger serviceSymfony 编译器通过:我想向 Logger 服务添加方法调用
【发布时间】:2017-11-03 12:48:34
【问题描述】:

我想给 Logger 服务添加一个方法调用(函数 setTimezone)。

这里有一个函数:https://github.com/Seldaek/monolog/blob/1.x/src/Monolog/Logger.php#L696

那我该怎么做呢?

我想在每次注入该服务时设置 UTC 时区。

我试过了

public function process(ContainerBuilder $container)
{
    $logger = $container->getDefinition('goobing_core.logging.logger');
    $logger->addMethodCall('setTimezone', [new \DateTimeZone('UTC')]);
}

XmlDumper.php 第 375 行中的 RuntimeException: 如果参数是对象或资源,则无法转储服务容器。

【问题讨论】:

    标签: php symfony dependency-injection monolog symfony-2.8


    【解决方案1】:

    试试这个:

    $utcTimeDefinition = new Definition(\DateTimeZone::class, ['UTC']);
    $logger = $container->getDefinition('goobing_core.logging.logger');
    $logger->addMethodCall('setTimezone', [$utcTimeDefinition]);
    

    【讨论】:

      【解决方案2】:

      您应该可以使用捆绑文件中的 build 方法来执行此操作,请参阅此处的文档 http://symfony.com/doc/current/service_container/compiler_passes.html

      【讨论】:

      • 公共函数进程(ContainerBuilder $container) { $logger = $container->getDefinition('logger'); // $logger->addMethodCall('setTimezone', [new \DateTimeZone('UTC')]); XmlDumper.php 第 375 行中的 RuntimeException:如果参数是对象或资源,则无法转储服务容器。
      • 我的代码有问题。可以多指导吗?谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2019-12-09
      • 2017-04-22
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多