diff --git a/DependencyInjection/Compiler/LoggerChannelPass.php b/DependencyInjection/Compiler/LoggerChannelPass.php index 847ddd72..ce952eba 100644 --- a/DependencyInjection/Compiler/LoggerChannelPass.php +++ b/DependencyInjection/Compiler/LoggerChannelPass.php @@ -47,7 +47,7 @@ public function process(ContainerBuilder $container) foreach ($definition->getArguments() as $index => $argument) { if ($argument instanceof Reference && 'logger' === (string) $argument) { - $definition->replaceArgument($index, new Reference($loggerId, $argument->getInvalidBehavior(), $argument->isStrict())); + $definition->replaceArgument($index, $this->changeReference($argument, $loggerId)); } } @@ -55,7 +55,7 @@ public function process(ContainerBuilder $container) foreach ($calls as $i => $call) { foreach ($call[1] as $index => $argument) { if ($argument instanceof Reference && 'logger' === (string) $argument) { - $calls[$i][1][$index] = new Reference($loggerId, $argument->getInvalidBehavior(), $argument->isStrict()); + $calls[$i][1][$index] = $this->changeReference($argument, $loggerId); } } } @@ -112,4 +112,22 @@ protected function createLogger($channel, $loggerId, ContainerBuilder $container $this->channels[] = $channel; } } + + /** + * Creates a copy of a reference and alters the service ID. + * + * @param Reference $reference + * @param string $serviceId + * + * @return Reference + */ + private function changeReference(Reference $reference, $serviceId) + { + if (method_exists($reference, 'isStrict')) { + // Stay compatible with Symfony 2 + return new Reference($serviceId, $reference->getInvalidBehavior(), $reference->isStrict()); + } + + return new Reference($serviceId, $reference->getInvalidBehavior()); + } }