From 241e901a6b426220e301a8278c6e0780454be917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Hump=C3=A1l?= Date: Tue, 20 Feb 2024 10:48:18 +0100 Subject: [PATCH 1/3] Postpone exception with multiple found LoggerInterfaces to autowire --- src/DI/Pass/LoggerPass.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/DI/Pass/LoggerPass.php b/src/DI/Pass/LoggerPass.php index 8376253..fe31b24 100644 --- a/src/DI/Pass/LoggerPass.php +++ b/src/DI/Pass/LoggerPass.php @@ -5,6 +5,7 @@ use Contributte\Messenger\Logger\MessengerLogger; use Nette\DI\Definitions\ServiceDefinition; use Nette\DI\Definitions\Statement; +use Nette\DI\ServiceCreationException; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Symfony\Component\Console\Logger\ConsoleLogger; @@ -34,13 +35,21 @@ public function beforePassCompile(): void $builder = $this->getContainerBuilder(); $config = $this->getConfig(); - $logger = $builder->getByType(LoggerInterface::class); + $multiple = null; + try { + $logger = $builder->getByType(LoggerInterface::class, false); + } catch (ServiceCreationException $e) { + // multiple loggers + $multiple = $e; + } // Register or resolve http logger if ($config->logger->httpLogger !== null) { $httpLogger = $builder->addDefinition($this->prefix('logger.httpLogger')) ->setFactory($config->logger->httpLogger) ->setAutowired(false); + } elseif ($multiple !== null) { + throw $e; } elseif ($logger !== null) { $httpLogger = $builder->addDefinition($this->prefix('logger.httpLogger')) ->setFactory('@' . $logger) @@ -56,6 +65,8 @@ public function beforePassCompile(): void $consoleLogger = $builder->addDefinition($this->prefix('logger.consoleLogger')) ->setFactory($config->logger->consoleLogger) ->setAutowired(false); + } elseif ($multiple !== null) { + throw $e; } elseif ($logger !== null) { $consoleLogger = $builder->addDefinition($this->prefix('logger.consoleLogger')) ->setFactory('@' . $logger) From fcb11d4a394b0d5c6dc243feb40c8b85fab113df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Hump=C3=A1l?= Date: Tue, 20 Feb 2024 11:01:48 +0100 Subject: [PATCH 2/3] Fix use ordering in MessengerExtension --- src/DI/MessengerExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DI/MessengerExtension.php b/src/DI/MessengerExtension.php index f144706..7452fe7 100644 --- a/src/DI/MessengerExtension.php +++ b/src/DI/MessengerExtension.php @@ -13,8 +13,8 @@ use Contributte\Messenger\DI\Pass\SerializerPass; use Contributte\Messenger\DI\Pass\TransportFactoryPass; use Contributte\Messenger\DI\Pass\TransportPass; -use Nette\DI\Definitions\Statement; use Nette\DI\CompilerExtension; +use Nette\DI\Definitions\Statement; use Nette\PhpGenerator\ClassType; use Nette\Schema\Expect; use Nette\Schema\Schema; From 783df41c769eb6b25951d5e4373fadd99e14c62e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Hump=C3=A1l?= Date: Tue, 20 Feb 2024 11:06:23 +0100 Subject: [PATCH 3/3] Fix CS by spaces after opening parentheses in DI Reflector --- src/DI/Utils/Reflector.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DI/Utils/Reflector.php b/src/DI/Utils/Reflector.php index 543814f..b58030a 100644 --- a/src/DI/Utils/Reflector.php +++ b/src/DI/Utils/Reflector.php @@ -66,11 +66,11 @@ public static function getMessageHandlerMessage(string $class, array $options): throw new LogicalException(sprintf('Handler must have "%s::%s()" method.', $class, $options['method'])); } - if ($rcMethod->getNumberOfParameters() !== 1 && !$rc->implementsInterface( BatchHandlerInterface::class)) { + if ($rcMethod->getNumberOfParameters() !== 1 && !$rc->implementsInterface(BatchHandlerInterface::class)) { throw new LogicalException(sprintf('Only one parameter is allowed in "%s::%s()."', $class, $options['method'])); } - if ($rc->implementsInterface( BatchHandlerInterface::class)) { + if ($rc->implementsInterface(BatchHandlerInterface::class)) { if ($rcMethod->getNumberOfParameters() !== 2) { throw new LogicalException(sprintf('Exactly two parameters are required in "%s::%s()."', $class, $options['method'])); }