diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
index d993fbe2584a2..ac3d97189822f 100644
--- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
+++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
@@ -8,11 +8,18 @@ CHANGELOG
* Not passing the project directory to the constructor of the `AssetsInstallCommand` is deprecated. This argument will
be mandatory in 5.0.
* Deprecated the "Psr\SimpleCache\CacheInterface" / "cache.app.simple" service, use "Symfony\Contracts\Cache\CacheInterface" / "cache.app" instead
+ * Added the ability to specify a custom `serializer` option for each
+ transport under`framework.messenger.transports`.
* [BC Break] When using Messenger, the default transport changed from
using Symfony's serializer service to use `PhpSerializer`, which uses
PHP's native `serialize()` and `unserialize()` functions. To use the
- original serialization method, set the `framework.messenger.serializer.id`
- config option to `messenger.transport.symfony_serializer`.
+ original serialization method, set the `framework.messenger.defaut_serializer`
+ config option to `messenger.transport.symfony_serializer`. Or set the
+ `serializer` option under one specific `transport`.
+ * [BC Break] The `framework.messenger.serializer` config key changed to
+ `framework.messenger.default_serializer`, which holds the string service
+ id and `framework.messenger.symfony_serializer`, which configures the
+ options if you're using Symfony's serializer.
* Added information about deprecated aliases in `debug:autowiring`
* Added php ini session options `sid_length` and `sid_bits_per_character`
to the `session` section of the configuration
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
index 1b1c079ec0aec..1b23702913404 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
@@ -1107,29 +1107,19 @@ function ($a) {
->end()
->end()
->end()
- ->arrayNode('serializer')
+ ->scalarNode('default_serializer')
+ ->defaultValue('messenger.transport.native_php_serializer')
+ ->info('Service id to use as the default serializer for the transports.')
+ ->end()
+ ->arrayNode('symfony_serializer')
->addDefaultsIfNotSet()
- ->beforeNormalization()
- ->always()
- ->then(function ($config) {
- if (false === $config) {
- return ['id' => null];
- }
-
- if (\is_string($config)) {
- return ['id' => $config];
- }
-
- return $config;
- })
- ->end()
->children()
- ->scalarNode('id')->defaultValue('messenger.transport.native_php_serializer')->end()
- ->scalarNode('format')->defaultValue('json')->end()
+ ->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end()
->arrayNode('context')
->normalizeKeys(false)
->useAttributeAsKey('name')
->defaultValue([])
+ ->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')
->prototype('variable')->end()
->end()
->end()
@@ -1146,6 +1136,7 @@ function ($a) {
->fixXmlConfig('option')
->children()
->scalarNode('dsn')->end()
+ ->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end()
->arrayNode('options')
->normalizeKeys(false)
->defaultValue([])
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 65de91c4f7879..192154fa06af8 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -78,7 +78,6 @@
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
use Symfony\Component\Messenger\MessageBus;
use Symfony\Component\Messenger\MessageBusInterface;
-use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
use Symfony\Component\Messenger\Transport\TransportInterface;
use Symfony\Component\Mime\MimeTypeGuesserInterface;
@@ -1604,28 +1603,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
$loader->load('messenger.xml');
- if (empty($config['transports'])) {
- $container->removeDefinition('messenger.transport.symfony_serializer');
- $container->removeDefinition('messenger.transport.amqp.factory');
- } else {
- if ('messenger.transport.symfony_serializer' === $config['serializer']['id']) {
- if (!$this->isConfigEnabled($container, $serializerConfig)) {
- throw new LogicException('The Messenger serializer cannot be enabled as the Serializer support is not available. Try enabling it or running "composer require symfony/serializer-pack".');
- }
-
- $container->getDefinition('messenger.transport.symfony_serializer')
- ->replaceArgument(1, $config['serializer']['format'])
- ->replaceArgument(2, $config['serializer']['context']);
- }
-
- if ($config['serializer']['id']) {
- $container->setAlias('messenger.transport.serializer', $config['serializer']['id']);
- } else {
- $container->removeDefinition('messenger.transport.amqp.factory');
- $container->removeDefinition(SerializerInterface::class);
- }
- }
-
if (null === $config['default_bus'] && 1 === \count($config['buses'])) {
$config['default_bus'] = key($config['buses']);
}
@@ -1677,16 +1654,24 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
}
}
+ if (empty($config['transports'])) {
+ $container->removeDefinition('messenger.transport.symfony_serializer');
+ $container->removeDefinition('messenger.transport.amqp.factory');
+ } else {
+ $container->getDefinition('messenger.transport.symfony_serializer')
+ ->replaceArgument(1, $config['symfony_serializer']['format'])
+ ->replaceArgument(2, $config['symfony_serializer']['context']);
+ $container->setAlias('messenger.default_serializer', $config['default_serializer']);
+ }
+
$senderAliases = [];
$transportRetryReferences = [];
foreach ($config['transports'] as $name => $transport) {
- if (0 === strpos($transport['dsn'], 'amqp://') && !$container->hasDefinition('messenger.transport.amqp.factory')) {
- throw new LogicException('The default AMQP transport is not available. Make sure you have installed and enabled the Serializer component. Try enabling it or running "composer require symfony/serializer-pack".');
- }
+ $serializerId = $transport['serializer'] ?? 'messenger.default_serializer';
$transportDefinition = (new Definition(TransportInterface::class))
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
- ->setArguments([$transport['dsn'], $transport['options']])
+ ->setArguments([$transport['dsn'], $transport['options'], new Reference($serializerId)])
->addTag('messenger.receiver', ['alias' => $name])
;
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
index 55976d1c02269..1720ea72e71aa 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
@@ -26,7 +26,7 @@
-
+
@@ -64,7 +64,6 @@
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
index 4a2705b950874..0415fa9559c54 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
@@ -402,7 +402,8 @@
-
+
+
@@ -412,12 +413,11 @@
-
+
-
@@ -437,6 +437,7 @@
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
index 88eb6529ed68d..bc1ee582fc081 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
@@ -325,8 +325,8 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
'enabled' => !class_exists(FullStack::class) && interface_exists(MessageBusInterface::class),
'routing' => [],
'transports' => [],
- 'serializer' => [
- 'id' => 'messenger.transport.native_php_serializer',
+ 'default_serializer' => 'messenger.transport.native_php_serializer',
+ 'symfony_serializer' => [
'format' => 'json',
'context' => [],
],
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
index d0a234eccc4b5..c74b64f3ffb1d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
@@ -5,7 +5,7 @@
$container->loadFromExtension('framework', [
'messenger' => [
- 'serializer' => false,
+ 'default_serializer' => false,
'routing' => [
FooMessage::class => ['sender.bar', 'sender.biz'],
BarMessage::class => 'sender.foo',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php
deleted file mode 100644
index 10d31660f90b7..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php
+++ /dev/null
@@ -1,10 +0,0 @@
-loadFromExtension('framework', [
- 'messenger' => [
- 'serializer' => false,
- 'transports' => [
- 'default' => 'amqp://localhost/%2f/messages',
- ],
- ],
-]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
index 08aae8f27d763..6e0b7c61f1297 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
@@ -3,7 +3,7 @@
$container->loadFromExtension('framework', [
'serializer' => true,
'messenger' => [
- 'serializer' => 'messenger.transport.symfony_serializer',
+ 'default_serializer' => 'messenger.transport.symfony_serializer',
'routing' => [
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage' => ['amqp', 'audit'],
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage' => [
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
index cab5efe30a631..6a1c729fd460b 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
@@ -3,8 +3,8 @@
$container->loadFromExtension('framework', [
'serializer' => true,
'messenger' => [
- 'serializer' => [
- 'id' => 'messenger.transport.symfony_serializer',
+ 'default_serializer' => 'messenger.transport.symfony_serializer',
+ 'symfony_serializer' => [
'format' => 'csv',
'context' => ['enable_max_depth' => true],
],
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php
deleted file mode 100644
index 7580c3c1e5751..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php
+++ /dev/null
@@ -1,13 +0,0 @@
-loadFromExtension('framework', [
- 'serializer' => [
- 'enabled' => false,
- ],
- 'messenger' => [
- 'serializer' => 'messenger.transport.symfony_serializer',
- 'transports' => [
- 'default' => 'amqp://localhost/%2f/messages',
- ],
- ],
-]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
index fd4b6feee71b2..a326c505e62b2 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
@@ -3,12 +3,13 @@
$container->loadFromExtension('framework', [
'serializer' => true,
'messenger' => [
- 'serializer' => 'messenger.transport.symfony_serializer',
+ 'default_serializer' => 'messenger.transport.symfony_serializer',
'transports' => [
'default' => 'amqp://localhost/%2f/messages',
'customised' => [
'dsn' => 'amqp://localhost/%2f/messages?exchange_name=exchange_name',
'options' => ['queue' => ['name' => 'Queue']],
+ 'serializer' => 'messenger.transport.native_php_serializer',
],
],
],
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml
deleted file mode 100644
index b030604466c40..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
index ccb93ba7f0330..6231a7a82e98a 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
@@ -8,7 +8,7 @@
-
+ messenger.transport.symfony_serializer
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
index c58fc9a5d4758..82a85aedcc849 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
@@ -8,11 +8,12 @@
-
+ messenger.transport.symfony_serializer
+
true
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml
deleted file mode 100644
index 7471f32e683d8..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
index ceaba5bfc8f6d..70cdb69a8ada4 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
@@ -8,9 +8,9 @@
-
+ messenger.transport.symfony_serializer
-
+
Queue
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml
index 0983f2ef321ee..42df49ea4d1cb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml
@@ -1,6 +1,6 @@
framework:
messenger:
- serializer: false
+ default_serializer: false
routing:
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml
deleted file mode 100644
index e31f3275a479b..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-framework:
- messenger:
- serializer: false
- transports:
- default: 'amqp://localhost/%2f/messages'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
index 1eedbbd03d0e6..4481a16d46033 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
@@ -1,7 +1,7 @@
framework:
serializer: true
messenger:
- serializer: messenger.transport.symfony_serializer
+ default_serializer: messenger.transport.symfony_serializer
routing:
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage': [amqp, audit]
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage':
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml
index 05b2083e0abdc..8740f37bd6ec1 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml
@@ -1,8 +1,8 @@
framework:
serializer: true
messenger:
- serializer:
- id: messenger.transport.symfony_serializer
+ default_serializer: messenger.transport.symfony_serializer
+ symfony_serializer:
format: csv
context:
enable_max_depth: true
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml
deleted file mode 100644
index bde0d3537d57b..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-framework:
- serializer:
- enabled: false
- messenger:
- serializer: messenger.transport.symfony_serializer
- transports:
- default: 'amqp://localhost/%2f/messages'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
index 6d2c535b72f80..48ff8c6c82364 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
@@ -1,7 +1,7 @@
framework:
serializer: true
messenger:
- serializer: messenger.transport.symfony_serializer
+ default_serializer: messenger.transport.symfony_serializer
transports:
default: 'amqp://localhost/%2f/messages'
customised:
@@ -9,3 +9,4 @@ framework:
options:
queue:
name: Queue
+ serializer: 'messenger.transport.native_php_serializer'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
index 6649315f9b0ce..e2cd21cd1dffd 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
@@ -661,15 +661,18 @@ public function testMessengerTransports()
$this->assertTrue($container->hasDefinition('messenger.transport.default'));
$this->assertTrue($container->getDefinition('messenger.transport.default')->hasTag('messenger.receiver'));
$this->assertEquals([['alias' => 'default']], $container->getDefinition('messenger.transport.default')->getTag('messenger.receiver'));
+ $transportArguments = $container->getDefinition('messenger.transport.default')->getArguments();
+ $this->assertEquals(new Reference('messenger.default_serializer'), $transportArguments[2]);
$this->assertTrue($container->hasDefinition('messenger.transport.customised'));
$transportFactory = $container->getDefinition('messenger.transport.customised')->getFactory();
$transportArguments = $container->getDefinition('messenger.transport.customised')->getArguments();
$this->assertEquals([new Reference('messenger.transport_factory'), 'createTransport'], $transportFactory);
- $this->assertCount(2, $transportArguments);
+ $this->assertCount(3, $transportArguments);
$this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $transportArguments[0]);
- $this->assertSame(['queue' => ['name' => 'Queue']], $transportArguments[1]);
+ $this->assertEquals(['queue' => ['name' => 'Queue']], $transportArguments[1]);
+ $this->assertEquals(new Reference('messenger.transport.native_php_serializer'), $transportArguments[2]);
$this->assertTrue($container->hasDefinition('messenger.transport.amqp.factory'));
}
@@ -693,29 +696,11 @@ public function testMessengerRouting()
], $sendersMapping[DummyMessage::class]->getValues());
}
- /**
- * @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException
- * @expectedExceptionMessage The Messenger serializer cannot be enabled as the Serializer support is not available. Try enabling it or running "composer require symfony/serializer-pack".
- */
- public function testMessengerTransportConfigurationWithoutSerializer()
- {
- $this->createContainerFromFile('messenger_transport_no_serializer');
- }
-
- /**
- * @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException
- * @expectedExceptionMessage The default AMQP transport is not available. Make sure you have installed and enabled the Serializer component. Try enabling it or running "composer require symfony/serializer-pack".
- */
- public function testMessengerAMQPTransportConfigurationWithoutSerializer()
- {
- $this->createContainerFromFile('messenger_amqp_transport_no_serializer');
- }
-
public function testMessengerTransportConfiguration()
{
$container = $this->createContainerFromFile('messenger_transport');
- $this->assertSame('messenger.transport.symfony_serializer', (string) $container->getAlias('messenger.transport.serializer'));
+ $this->assertSame('messenger.transport.symfony_serializer', (string) $container->getAlias('messenger.default_serializer'));
$serializerTransportDefinition = $container->getDefinition('messenger.transport.symfony_serializer');
$this->assertSame('csv', $serializerTransportDefinition->getArgument(1));
diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md
index 304790630b759..a2f94de63d406 100644
--- a/src/Symfony/Component/Messenger/CHANGELOG.md
+++ b/src/Symfony/Component/Messenger/CHANGELOG.md
@@ -4,10 +4,12 @@ CHANGELOG
4.3.0
-----
+ * [BC BREAK] The `TransportFactoryInterface::createTransport()` signature
+ changed: a required 3rd `SerializerInterface` argument was added.
* Added a new `SyncTransport` along with `ForceCallHandlersStamp` to
explicitly handle messages synchronously.
* Added optional parameter `prefetch_count` in connection configuration,
- to setup channel prefetch count
+ to setup channel prefetch count.
* New classes: `RoutableMessageBus`, `AddBusNameStampMiddleware`
and `BusNameStamp` were added, which allow you to add a bus identifier
to the `Envelope` then find the correct bus when receiving from
diff --git a/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php b/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php
index 8e4d66ff3e63a..60d5e806e357c 100644
--- a/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php
+++ b/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php
@@ -21,9 +21,7 @@ class AmqpTransportFactoryTest extends TestCase
{
public function testSupportsOnlyAmqpTransports()
{
- $factory = new AmqpTransportFactory(
- $this->getMockBuilder(SerializerInterface::class)->getMock()
- );
+ $factory = new AmqpTransportFactory();
$this->assertTrue($factory->supports('amqp://localhost', []));
$this->assertFalse($factory->supports('sqs://localhost', []));
@@ -32,12 +30,11 @@ public function testSupportsOnlyAmqpTransports()
public function testItCreatesTheTransport()
{
- $factory = new AmqpTransportFactory(
- $serializer = $this->getMockBuilder(SerializerInterface::class)->getMock()
- );
+ $factory = new AmqpTransportFactory();
+ $serializer = $this->createMock(SerializerInterface::class);
$expectedTransport = new AmqpTransport(Connection::fromDsn('amqp://localhost', ['foo' => 'bar']), $serializer);
- $this->assertEquals($expectedTransport, $factory->createTransport('amqp://localhost', ['foo' => 'bar']));
+ $this->assertEquals($expectedTransport, $factory->createTransport('amqp://localhost', ['foo' => 'bar'], $serializer));
}
}
diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php
index 28c826891945c..d4293e12070dd 100644
--- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php
+++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php
@@ -11,7 +11,6 @@
namespace Symfony\Component\Messenger\Transport\AmqpExt;
-use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer;
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
use Symfony\Component\Messenger\Transport\TransportInterface;
@@ -23,16 +22,9 @@
*/
class AmqpTransportFactory implements TransportFactoryInterface
{
- private $serializer;
-
- public function __construct(SerializerInterface $serializer = null)
- {
- $this->serializer = $serializer ?? new PhpSerializer();
- }
-
- public function createTransport(string $dsn, array $options): TransportInterface
+ public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface
{
- return new AmqpTransport(Connection::fromDsn($dsn, $options), $this->serializer);
+ return new AmqpTransport(Connection::fromDsn($dsn, $options), $serializer);
}
public function supports(string $dsn, array $options): bool
diff --git a/src/Symfony/Component/Messenger/Transport/TransportFactory.php b/src/Symfony/Component/Messenger/Transport/TransportFactory.php
index 6c447f6844555..89833fac3bf5e 100644
--- a/src/Symfony/Component/Messenger/Transport/TransportFactory.php
+++ b/src/Symfony/Component/Messenger/Transport/TransportFactory.php
@@ -12,6 +12,7 @@
namespace Symfony\Component\Messenger\Transport;
use Symfony\Component\Messenger\Exception\InvalidArgumentException;
+use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
/**
* @author Samuel Roze
@@ -30,11 +31,11 @@ public function __construct(iterable $factories)
$this->factories = $factories;
}
- public function createTransport(string $dsn, array $options): TransportInterface
+ public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface
{
foreach ($this->factories as $factory) {
if ($factory->supports($dsn, $options)) {
- return $factory->createTransport($dsn, $options);
+ return $factory->createTransport($dsn, $options, $serializer);
}
}
diff --git a/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php b/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php
index 4c1d9539fbd51..7c3c3a65cdb0e 100644
--- a/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php
+++ b/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php
@@ -11,6 +11,8 @@
namespace Symfony\Component\Messenger\Transport;
+use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
+
/**
* Creates a Messenger transport.
*
@@ -20,7 +22,7 @@
*/
interface TransportFactoryInterface
{
- public function createTransport(string $dsn, array $options): TransportInterface;
+ public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface;
public function supports(string $dsn, array $options): bool;
}