8000 Making the serializer configurable by transport · symfony/symfony@f3e7aff · GitHub
[go: up one dir, main page]

Skip to content

Commit f3e7aff

Browse files
committed
Making the serializer configurable by transport
1 parent c30f462 commit f3e7aff

19 files changed

+41
-132
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,7 @@ function ($a) {
11051105
->fixXmlConfig('option')
11061106
->children()
11071107
->scalarNode('dsn')->end()
1108+
->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end()
11081109
->arrayNode('options')
11091110
->normalizeKeys(false)
11101111
->defaultValue([])

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@
7777
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
7878
use Symfony\Component\Messenger\MessageBus;
7979
use Symfony\Component\Messenger\MessageBusInterface;
80-
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
8180
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
8281
use Symfony\Component\Messenger\Transport\TransportInterface;
8382
use Symfony\Component\Mime\MimeTypeGuesserInterface;
@@ -1592,28 +1591,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
15921591

15931592
$loader->load('messenger.xml');
15941593

1595-
if (empty($config['transports'])) {
1596-
$container->removeDefinition('messenger.transport.symfony_serializer');
1597-
$container->removeDefinition('messenger.transport.amqp.factory');
1598-
} else {
1599-
if ('messenger.transport.symfony_serializer' === $config['serializer']['id']) {
1600-
if (!$this->isConfigEnabled($container, $serializerConfig)) {
1601-
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".');
1602-
}
1603-
1604-
$container->getDefinition('messenger.transport.symfony_serializer')
1605-
->replaceArgument(1, $config['serializer']['format'])
1606-
->replaceArgument(2, $config['serializer']['context']);
1607-
}
1608-
1609-
if ($config['serializer']['id']) {
1610-
$container->setAlias('messenger.transport.serializer', $config['serializer']['id']);
1611-
} else {
1612-
$container->removeDefinition('messenger.transport.amqp.factory');
1613-
$container->removeDefinition(SerializerInterface::class);
1614-
}
1615-
}
1616-
16171594
if (null === $config['default_bus'] && 1 === \count($config['buses'])) {
16181595
$config['default_bus'] = key($config['buses']);
16191596
}
@@ -1665,16 +1642,27 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16651642
}
16661643
}
16671644

1645+
if (empty($config['transports'])) {
1646+
$container->removeDefinition('messenger.transport.symfony_serializer');
1647+
$container->removeDefinition('messenger.transport.amqp.factory');
1648+
} else {
1649+
$container->getDefinition('messenger.transport.symfony_serializer')
1650+
->replaceArgument(1, $config['serializer']['format'])
1651+
->replaceArgument(2, $config['serializer']['context']);
1652+
$container->setAlias('messenger.transport.serializer', $config['serializer']['id']);
1653+
}
1654+
16681655
$senderAliases = [];
16691656
$transportRetryReferences = [];
16701657
foreach ($config['transports'] as $name => $transport) {
1671-
if (0 === strpos($transport['dsn'], 'amqp://') && !$container->hasDefinition('messenger.transport.amqp.factory')) {
1672-
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".');
1658+
if (null !== $transport['serializer']) {
1659+
$transport['options']['serializer'] = new Reference($transport['serializer']);
16731660
}
1661+
$serializerId = null !== $transport['serializer'] ? $transport['serializer'] : 'messenger.transport.serializer';
16741662

16751663
$transportDefinition = (new Definition(TransportInterface::class))
16761664
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
1677-
->setArguments([$transport['dsn'], $transport['options']])
1665+
->setArguments([$transport['dsn'], $transport['options'], new Reference($serializerId)])
16781666
->addTag('messenger.receiver', ['alias' => $name])
16791667
;
16801668
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464

6565
<service id="messenger.transport.amqp.factory" class="Symfony\Component\Messenger\Transport\AmqpExt\AmqpTransportFactory">
6666
<tag name="messenger.transport_factory" />
67-
<argument type="service" id="messenger.transport.serializer" />
6867
</service>
6968

7069
<!-- retry -->

src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@
429429
<xsd:element name="options" type="metadata" minOccurs="0" maxOccurs="unbounded" />
430430
</xsd:sequence>
431431
<xsd:attribute name="name" type="xsd:string" />
432+
<xsd:attribute name="serializer" type="xsd:string" />
432433
<xsd:attribute name="dsn" type="xsd:string" />
433434
</xsd:complexType>
434435

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'customised' => [
1010
'dsn' => 'amqp://localhost/%2f/messages?exchange_name=exchange_name',
1111
'options' => ['queue' => ['name' => 'Queue']],
12+
'serializer' => 'messenger.transport.native_php_serializer',
1213
],
1314
],
1415
],

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<framework:messenger>
1111
<framework:serializer id="messenger.transport.symfony_serializer" />
1212
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
13-
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name">
13+
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name" serializer="messenger.transport.native_php_serializer">
1414
<framework:options>
1515
<framework:queue>
1616
<framework:name>Queue</framework:name>

0 commit comments

Comments
 (0)
0