feature #34648 [Mailer] Allow to configure or disable the message bus to use (ogizanagi)
This PR was merged into the 5.1-dev branch.
Discussion
----------
[Mailer] Allow to configure or disable the message bus to use
| Q | A
| ------------- | ---
| Branch? | master <!-- see below -->
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets | #34633 <!-- prefix each issue number with "Fix #", if any -->
| License | MIT
| Doc PR | todo
A new `mailer.message_bus` option allowing to choose the message bus to use instead of using the default one.
Also allows to set it to `false` so no message bus is used and the transport will be called directly.
Commits
-------
42fd0cf985
[Mailer] Allow to configure or disable the message bus to use
This commit is contained in:
commit
04d6d8dc56
@ -6,6 +6,7 @@ CHANGELOG
|
||||
|
||||
* Marked `MicroKernelTrait::configureRoutes()` as `@internal` and `@final`.
|
||||
* Deprecated not overriding `MicroKernelTrait::configureRouting()`.
|
||||
* Added a new `mailer.message_bus` option to configure or disable the message bus to use to send mails.
|
||||
|
||||
5.0.0
|
||||
-----
|
||||
|
@ -1475,6 +1475,7 @@ class Configuration implements ConfigurationInterface
|
||||
->end()
|
||||
->fixXmlConfig('transport')
|
||||
->children()
|
||||
->scalarNode('message_bus')->defaultNull()->info('The message bus to use. Defaults to the default bus if the Messenger component is installed.')->end()
|
||||
->scalarNode('dsn')->defaultNull()->end()
|
||||
->arrayNode('transports')
|
||||
->useAttributeAsKey('name')
|
||||
|
@ -1884,6 +1884,13 @@ class FrameworkExtension extends Extension
|
||||
$container->getDefinition('mailer.transports')->setArgument(0, $transports);
|
||||
$container->getDefinition('mailer.default_transport')->setArgument(0, current($transports));
|
||||
|
||||
$mailer = $container->getDefinition('mailer.mailer');
|
||||
if (false === $messageBus = $config['message_bus']) {
|
||||
$mailer->replaceArgument(1, null);
|
||||
} else {
|
||||
$mailer->replaceArgument(1, $messageBus ? new Reference($messageBus) : new Reference('messenger.default_bus', ContainerInterface::NULL_ON_INVALID_REFERENCE));
|
||||
}
|
||||
|
||||
$classToServices = [
|
||||
SesTransportFactory::class => 'mailer.transport_factory.amazon',
|
||||
GmailTransportFactory::class => 'mailer.transport_factory.gmail',
|
||||
|
@ -7,7 +7,7 @@
|
||||
<services>
|
||||
<service id="mailer.mailer" class="Symfony\Component\Mailer\Mailer">
|
||||
<argument type="service" id="mailer.transports" />
|
||||
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />
|
||||
<argument /> <!-- message bus-->
|
||||
<argument type="service" id="event_dispatcher" on-invalid="ignore" />
|
||||
</service>
|
||||
<service id="mailer" alias="mailer.mailer" />
|
||||
|
@ -549,6 +549,7 @@
|
||||
<xsd:element name="envelope" type="mailer_envelope" minOccurs="0" maxOccurs="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="dsn" type="xsd:string" />
|
||||
<xsd:attribute name="message-bus" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="mailer_envelope">
|
||||
|
@ -490,6 +490,7 @@ class ConfigurationTest extends TestCase
|
||||
'dsn' => null,
|
||||
'transports' => [],
|
||||
'enabled' => !class_exists(FullStack::class) && class_exists(Mailer::class),
|
||||
'message_bus' => null,
|
||||
],
|
||||
'notifier' => [
|
||||
'enabled' => !class_exists(FullStack::class) && class_exists(Notifier::class),
|
||||
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
$container->loadFromExtension('framework', [
|
||||
'mailer' => [
|
||||
'dsn' => 'smtp://example.com',
|
||||
'message_bus' => false,
|
||||
],
|
||||
]);
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
$container->loadFromExtension('framework', [
|
||||
'mailer' => [
|
||||
'dsn' => 'smtp://example.com',
|
||||
'message_bus' => 'app.another_bus',
|
||||
],
|
||||
]);
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" ?>
|
||||
|
||||
<container xmlns="http://symfony.com/schema/dic/services"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:framework="http://symfony.com/schema/dic/symfony"
|
||||
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
|
||||
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
|
||||
|
||||
<framework:config>
|
||||
<framework:mailer dsn="smtp://example.com" message-bus="false">
|
||||
</framework:mailer>
|
||||
</framework:config>
|
||||
</container>
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" ?>
|
||||
|
||||
<container xmlns="http://symfony.com/schema/dic/services"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:framework="http://symfony.com/schema/dic/symfony"
|
||||
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
|
||||
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
|
||||
|
||||
<framework:config>
|
||||
<framework:mailer dsn="smtp://example.com" message-bus="app.another_bus">
|
||||
</framework:mailer>
|
||||
</framework:config>
|
||||
</container>
|
@ -0,0 +1,4 @@
|
||||
framework:
|
||||
mailer:
|
||||
dsn: 'smtp://example.com'
|
||||
message_bus: false
|
@ -0,0 +1,4 @@
|
||||
framework:
|
||||
mailer:
|
||||
dsn: 'smtp://example.com'
|
||||
message_bus: app.another_bus
|
@ -1367,6 +1367,21 @@ abstract class FrameworkExtensionTest extends TestCase
|
||||
$l = $container->getDefinition('mailer.envelope_listener');
|
||||
$this->assertSame('sender@example.org', $l->getArgument(0));
|
||||
$this->assertSame(['redirected@example.org', 'redirected1@example.org'], $l->getArgument(1));
|
||||
$this->assertEquals(new Reference('messenger.default_bus', ContainerInterface::NULL_ON_INVALID_REFERENCE), $container->getDefinition('mailer.mailer')->getArgument(1));
|
||||
}
|
||||
|
||||
public function testMailerWithDisabledMessageBus(): void
|
||||
{
|
||||
$container = $this->createContainerFromFile('mailer_with_disabled_message_bus');
|
||||
|
||||
$this->assertNull($container->getDefinition('mailer.mailer')->getArgument(1));
|
||||
}
|
||||
|
||||
public function testMailerWithSpecificMessageBus(): void
|
||||
{
|
||||
$container = $this->createContainerFromFile('mailer_with_specific_message_bus');
|
||||
|
||||
$this->assertEquals(new Reference('app.another_bus'), $container->getDefinition('mailer.mailer')->getArgument(1));
|
||||
}
|
||||
|
||||
protected function createContainer(array $data = [])
|
||||
|
Reference in New Issue
Block a user