[FrameworkBundle] Move mailer configuration to php

This commit is contained in:
Anthony Moutte 2020-06-11 10:44:59 +02:00 committed by Tobias Schultze
parent 8df6380fc7
commit eb88f8856b
7 changed files with 180 additions and 121 deletions

View File

@ -356,7 +356,7 @@ class FrameworkExtension extends Extension
}
if ($this->mailerConfigEnabled = $this->isConfigEnabled($container, $config['mailer'])) {
$this->registerMailerConfiguration($config['mailer'], $container, $loader);
$this->registerMailerConfiguration($config['mailer'], $container, $phpLoader);
}
if ($this->isConfigEnabled($container, $config['notifier'])) {
@ -369,7 +369,7 @@ class FrameworkExtension extends Extension
$this->registerSsiConfiguration($config['ssi'], $container, $loader);
$this->registerFragmentsConfiguration($config['fragments'], $container, $loader);
$this->registerTranslatorConfiguration($config['translator'], $container, $loader, $config['default_locale']);
$this->registerProfilerConfiguration($config['profiler'], $container, $loader);
$this->registerProfilerConfiguration($config['profiler'], $container, $loader, $phpLoader);
$this->registerWorkflowConfiguration($config['workflows'], $container, $loader);
$this->registerDebugConfiguration($config['php_errors'], $container, $loader);
$this->registerRouterConfiguration($config['router'], $container, $loader, $config['translator']['enabled_locales'] ?? []);
@ -568,7 +568,7 @@ class FrameworkExtension extends Extension
$container->setParameter('fragment.path', $config['path']);
}
private function registerProfilerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
private function registerProfilerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader, PhpFileLoader $phpLoader)
{
if (!$this->isConfigEnabled($container, $config)) {
// this is needed for the WebProfiler to work even if the profiler is disabled
@ -600,7 +600,7 @@ class FrameworkExtension extends Extension
}
if ($this->mailerConfigEnabled) {
$loader->load('mailer_debug.xml');
$phpLoader->load('mailer_debug.php');
}
if ($this->httpClientConfigEnabled) {
@ -1953,14 +1953,14 @@ class FrameworkExtension extends Extension
}
}
private function registerMailerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
private function registerMailerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
{
if (!class_exists(Mailer::class)) {
throw new LogicException('Mailer support cannot be enabled as the component is not installed. Try running "composer require symfony/mailer".');
}
$loader->load('mailer.xml');
$loader->load('mailer_transports.xml');
$loader->load('mailer.php');
$loader->load('mailer_transports.php');
if (!\count($config['transports']) && null === $config['dsn']) {
$config['dsn'] = 'smtp://null';
}

View File

@ -0,0 +1,75 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mailer\EventListener\EnvelopeListener;
use Symfony\Component\Mailer\EventListener\MessageListener;
use Symfony\Component\Mailer\EventListener\MessageLoggerListener;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Messenger\MessageHandler;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Transport\TransportInterface;
use Symfony\Component\Mailer\Transport\Transports;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mailer.mailer', Mailer::class)
->args([
service('mailer.transports'),
abstract_arg('message bus'),
service('event_dispatcher')->ignoreOnInvalid(),
])
->alias('mailer', 'mailer.mailer')
->alias(MailerInterface::class, 'mailer.mailer')
->set('mailer.transports', Transports::class)
->factory([service('mailer.transport_factory'), 'fromStrings'])
->args([
abstract_arg('transports'),
])
->set('mailer.transport_factory', Transport::class)
->args([
tagged_iterator('mailer.transport_factory'),
])
->set('mailer.default_transport', TransportInterface::class)
->factory([service('mailer.transport_factory'), 'fromString'])
->args([
abstract_arg('env(MAILER_DSN)'),
])
->alias(TransportInterface::class, 'mailer.default_transport')
->set('mailer.messenger.message_handler', MessageHandler::class)
->args([
service('mailer.transports'),
])
->tag('messenger.message_handler')
->set('mailer.envelope_listener', EnvelopeListener::class)
->args([
abstract_arg('sender'),
abstract_arg('recipients'),
])
->tag('kernel.event_subscriber')
->set('mailer.message_listener', MessageListener::class)
->args([
abstract_arg('headers'),
])
->tag('kernel.event_subscriber')
->set('mailer.logger_message_listener', MessageLoggerListener::class)
->tag('kernel.event_subscriber')
;
};

View File

@ -1,51 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="mailer.mailer" class="Symfony\Component\Mailer\Mailer">
<argument type="service" id="mailer.transports" />
<argument /> <!-- message bus-->
<argument type="service" id="event_dispatcher" on-invalid="ignore" />
</service>
<service id="mailer" alias="mailer.mailer" />
<service id="Symfony\Component\Mailer\MailerInterface" alias="mailer.mailer" />
<service id="mailer.transports" class="Symfony\Component\Mailer\Transport\Transports">
<factory service="mailer.transport_factory" method="fromStrings" />
<argument type="collection" /> <!-- transports -->
</service>
<service id="mailer.transport_factory" class="Symfony\Component\Mailer\Transport">
<argument type="tagged_iterator" tag="mailer.transport_factory" />
</service>
<service id="mailer.default_transport" class="Symfony\Component\Mailer\Transport\TransportInterface">
<factory service="mailer.transport_factory" method="fromString" />
<argument /> <!-- env(MAILER_DSN) -->
</service>
<service id="Symfony\Component\Mailer\Transport\TransportInterface" alias="mailer.default_transport" />
<service id="mailer.messenger.message_handler" class="Symfony\Component\Mailer\Messenger\MessageHandler">
<argument type="service" id="mailer.transports" />
<tag name="messenger.message_handler" />
</service>
<service id="mailer.envelope_listener" class="Symfony\Component\Mailer\EventListener\EnvelopeListener">
<argument /> <!-- sender -->
<argument /> <!-- recipients -->
<tag name="kernel.event_subscriber"/>
</service>
<service id="mailer.message_listener" class="Symfony\Component\Mailer\EventListener\MessageListener">
<argument /> <!-- headers -->
<tag name="kernel.event_subscriber"/>
</service>
<service id="mailer.logger_message_listener" class="Symfony\Component\Mailer\EventListener\MessageLoggerListener">
<tag name="kernel.event_subscriber"/>
</service>
</services>
</container>

View File

@ -0,0 +1,27 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mailer\DataCollector\MessageDataCollector;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mailer.data_collector', MessageDataCollector::class)
->args([
service('mailer.logger_message_listener'),
])
->tag('data_collector', [
'template' => '@WebProfiler/Collector/mailer.html.twig',
'id' => 'mailer',
])
;
};

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="mailer.data_collector" class="Symfony\Component\Mailer\DataCollector\MessageDataCollector">
<argument type="service" id="mailer.logger_message_listener" />
<tag name="data_collector" template="@WebProfiler/Collector/mailer.html.twig" id="mailer" />
</service>
</services>
</container>

View File

@ -0,0 +1,71 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory;
use Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory;
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory;
use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory;
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
use Symfony\Component\Mailer\Transport\NullTransportFactory;
use Symfony\Component\Mailer\Transport\SendmailTransportFactory;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory;
return static function (ContainerConfigurator $container) {
$container->services()
->set('mailer.transport_factory.abstract', AbstractTransportFactory::class)
->abstract()
->args([
service('event_dispatcher'),
service('http_client')->ignoreOnInvalid(),
service('logger')->ignoreOnInvalid(),
])
->set('mailer.transport_factory.amazon', SesTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.gmail', GmailTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.mailchimp', MandrillTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.mailgun', MailgunTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.postmark', PostmarkTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.sendgrid', SendgridTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.null', NullTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.sendmail', SendmailTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory')
->set('mailer.transport_factory.smtp', EsmtpTransportFactory::class)
->parent('mailer.transport_factory.abstract')
->tag('mailer.transport_factory', ['priority' => -100])
;
};

View File

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="mailer.transport_factory.abstract" class="Symfony\Component\Mailer\Transport\AbstractTransportFactory" abstract="true">
<argument type="service" id="event_dispatcher" />
<argument type="service" id="http_client" on-invalid="ignore" />
<argument type="service" id="logger" on-invalid="ignore" />
</service>
<service id="mailer.transport_factory.amazon" class="Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.gmail" class="Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.mailchimp" class="Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.mailgun" class="Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.postmark" class="Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.sendgrid" class="Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.null" class="Symfony\Component\Mailer\Transport\NullTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.sendmail" class="Symfony\Component\Mailer\Transport\SendmailTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>
<service id="mailer.transport_factory.smtp" class="Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" priority="-100" />
</service>
</services>
</container>