From acfed8270eb169676425f2790b3ebe7df253c1c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20J=2E=20Garc=C3=ADa=20Lagar?= Date: Fri, 7 Jun 2019 15:19:56 +0200 Subject: [PATCH 1/2] Allow custom transports for mailer component --- src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md | 1 + .../DependencyInjection/Configuration.php | 10 ++++++++++ .../DependencyInjection/FrameworkExtension.php | 7 ++++++- .../Tests/DependencyInjection/ConfigurationTest.php | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index a405c199d693c..1f7150de63653 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG 4.4.0 ----- + * Added the ability to specify a custom mailer `transport_id` * Deprecated support for `templating` engine in `TemplateController`, use Twig instead * Deprecated the `$parser` argument of `ControllerResolver::__construct()` and `DelegatingLoader::__construct()` * Deprecated the `controller_name_converter` and `resolve_controller_name_subscriber` services diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index ea64157fde9bc..bdc9b9ffcd1b8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -1523,8 +1523,18 @@ private function addMailerSection(ArrayNodeDefinition $rootNode) ->arrayNode('mailer') ->info('Mailer configuration') ->{!class_exists(FullStack::class) && class_exists(Mailer::class) ? 'canBeDisabled' : 'canBeEnabled'}() + ->beforeNormalization() + ->always(function ($v) { + if (isset($v['dsn']) && isset($v['transport_id'])) { + throw new LogicException('You must set the mailer "dsn" to null, to use a custom transport service.'); + } + + return $v; + }) + ->end() ->children() ->scalarNode('dsn')->defaultValue('smtp://null')->end() + ->scalarNode('transport_id')->defaultNull()->end() ->end() ->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 98c94f2a21ccc..1244a97da6129 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1916,7 +1916,12 @@ private function registerMailerConfiguration(array $config, ContainerBuilder $co } $loader->load('mailer.xml'); - $container->getDefinition('mailer.default_transport')->setArgument(0, $config['dsn']); + + if (null === $config['transport_id']) { + $container->getDefinition('mailer.default_transport')->setArgument(0, $config['dsn']); + } else { + $container->getDefinition('mailer.mailer')->setArgument(0, new Reference($config['transport_id'])); + } } /** diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 3980036006b11..bfd7c6964c236 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -375,6 +375,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'mailer' => [ 'dsn' => 'smtp://null', 'enabled' => !class_exists(FullStack::class) && class_exists(Mailer::class), + 'transport_id' => null, ], ]; } From ce678191132cdf78c6f57eaa4dc61fb41ce8b965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20J=2E=20Garc=C3=ADa=20Lagar?= Date: Fri, 7 Jun 2019 17:04:43 +0200 Subject: [PATCH 2/2] Define the given `transport_id` as the default mailer transport --- .../FrameworkBundle/DependencyInjection/FrameworkExtension.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 1244a97da6129..de88a5f532ed9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1920,7 +1920,8 @@ private function registerMailerConfiguration(array $config, ContainerBuilder $co if (null === $config['transport_id']) { $container->getDefinition('mailer.default_transport')->setArgument(0, $config['dsn']); } else { - $container->getDefinition('mailer.mailer')->setArgument(0, new Reference($config['transport_id'])); + $container->removeDefinition('mailer.default_transport'); + $container->setAlias('mailer.default_transport', $config['transport_id']); } }