Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b9530f5

Browse filesBrowse files
committed
Adding a base64_encode option to messenger serializer + config reorg
1 parent 6230e93 commit b9530f5
Copy full SHA for b9530f5

19 files changed

+132
-50
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+24-12Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,20 +1142,32 @@ function ($a) {
11421142
->end()
11431143
->end()
11441144
->end()
1145-
->scalarNode('default_serializer')
1146-
->defaultValue('messenger.transport.native_php_serializer')
1147-
->info('Service id to use as the default serializer for the transports.')
1148-
->end()
1149-
->arrayNode('symfony_serializer')
1145+
->arrayNode('serializer')
11501146
->addDefaultsIfNotSet()
11511147
->children()
1152-
->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end()
1153-
->arrayNode('context')
1154-
->normalizeKeys(false)
1155-
->useAttributeAsKey('name')
1156-
->defaultValue([])
1157-
->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')
1158-
->prototype('variable')->end()
1148+
->scalarNode('default_serializer')
1149+
->defaultValue('messenger.transport.native_php_serializer')
1150+
->info('Service id to use as the default serializer for the transports.')
1151+
->end()
1152+
->arrayNode('native_php_serializer')
1153+
->info('Configure behavior of the messenger.transport.native_php_serializer serializer.')
1154+
->addDefaultsIfNotSet()
1155+
->children()
1156+
->booleanNode('base64_encode')->defaultValue(false)->info('base64_encode the serialized body? Needed if your transport cannot handle binary data from serialize().')->end()
1157+
->end()
1158+
->end()
1159+
->arrayNode('symfony_serializer')
1160+
->addDefaultsIfNotSet()
1161+
->children()
1162+
->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end()
1163+
->arrayNode('context')
1164+
->normalizeKeys(false)
1165+
->useAttributeAsKey('name')
1166+
->defaultValue([])
1167+
->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')
1168+
->prototype('variable')->end()
1169+
->end()
1170+
->end()
11591171
->end()
11601172
->end()
11611173
->end()

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+5-3Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1684,9 +1684,11 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16841684
$container->removeDefinition('messenger.transport.amqp.factory');
16851685
} else {
16861686
$container->getDefinition('messenger.transport.symfony_serializer')
1687-
->replaceArgument(1, $config['symfony_serializer']['format'])
1688-
->replaceArgument(2, $config['symfony_serializer']['context']);
1689-
$container->setAlias('messenger.default_serializer', $config['default_serializer']);
1687+
->replaceArgument(1, $config['serializer']['symfony_serializer']['format'])
1688+
->replaceArgument(2, $config['serializer']['symfony_serializer']['context']);
1689+
$container->getDefinition('messenger.transport.native_php_serializer')
1690+
->replaceArgument(0, $config['serializer']['native_php_serializer']['base64_encode']);
1691+
$container->setAlias('messenger.default_serializer', $config['serializer']['default_serializer']);
16901692
}
16911693

16921694
$senderAliases = [];

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
</service>
2929
<service id="Symfony\Component\Messenger\Transport\Serialization\SerializerInterface" alias="messenger.default_serializer" />
3030

31-
<service id="messenger.transport.native_php_serializer" class="Symfony\Component\Messenger\Transport\Serialization\PhpSerializer" />
31+
<service id="messenger.transport.native_php_serializer" class="Symfony\Component\Messenger\Transport\Serialization\PhpSerializer">
32+
<argument /> <!-- Should base64_encode -->
33+
</service>
3234

3335
<!-- Middleware -->
3436
<service id="messenger.middleware.handle_message" class="Symfony\Component\Messenger\Middleware\HandleMessageMiddleware" abstract="true">

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+13-4Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -406,17 +406,26 @@
406406

407407
<xsd:complexType name="messenger">
408408
<xsd:sequence>
409-
<xsd:element name="default-serializer" type="xsd:string" minOccurs="0" />
410-
<xsd:element name="symfony-serializer" type="messenger_symfony_serializer" minOccurs="0" />
411-
<xsd:element name="encoder" type="xsd:string" minOccurs="0" />
412-
<xsd:element name="decoder" type="xsd:string" minOccurs="0" />
409+
<xsd:element name="serializer" type="messenger_serializer" minOccurs="0" />
413410
<xsd:element name="routing" type="messenger_routing" minOccurs="0" maxOccurs="unbounded" />
414411
<xsd:element name="transport" type="messenger_transport" minOccurs="0" maxOccurs="unbounded" />
415412
<xsd:element name="bus" type="messenger_bus" minOccurs="0" maxOccurs="unbounded" />
416413
</xsd:sequence>
417414
<xsd:attribute name="default-bus" type="xsd:string" />
418415
</xsd:complexType>
419416

417+
<xsd:complexType name="messenger_serializer">
418+
<xsd:sequence>
419+
<xsd:element name="native-php-serializer" type="messenger_native_php_serializer" minOccurs="0" />
420+
<xsd:element name="symfony-serializer" type="messenger_symfony_serializer" minOccurs="0" />
421+
</xsd:sequence>
422+
<xsd:attribute name="default-serializer" type="xsd:string" />
423+
</xsd:complexType>
424+
425+
<xsd:complexType name="messenger_native_php_serializer">
426+
<xsd:attribute name="base64-encode" type="xsd:boolean" />
427+
</xsd:complexType>
428+
420429
<xsd:complexType name="messenger_symfony_serializer">
421430
<xsd:sequence>
422431
<xsd:element name="context" type="metadata" minOccurs="0" maxOccurs="unbounded" />

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
+9-4Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,15 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
327327
'enabled' => !class_exists(FullStack::class) && interface_exists(MessageBusInterface::class),
328328
'routing' => [],
329329
'transports' => [],
330-
'default_serializer' => 'messenger.transport.native_php_serializer',
331-
'symfony_serializer' => [
332-
'format' => 'json',
333-
'context' => [],
330+
'serializer' => [
331+
'default_serializer' => 'messenger.transport.native_php_serializer',
332+
'native_php_serializer' => [
333+
'base64_encode' => false,
334+
],
335+
'symfony_serializer' => [
336+
'format' => 'json',
337+
'context' => [],
338+
],
334339
],
335340
'default_bus' => null,
336341
'buses' => ['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]],

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
$container->loadFromExtension('framework', [
77
'messenger' => [
8-
'default_serializer' => false,
98
'routing' => [
109
FooMessage::class => ['sender.bar', 'sender.biz'],
1110
BarMessage::class => 'sender.foo',

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'default_serializer' => 'messenger.transport.symfony_serializer',
6+
'serializer' => [
7+
'default_serializer' => 'messenger.transport.symfony_serializer',
8+
],
79
'routing' => [
810
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage' => ['amqp', 'audit'],
911
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage' => [

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
+9-4Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'default_serializer' => 'messenger.transport.symfony_serializer',
7-
'symfony_serializer' => [
8-
'format' => 'csv',
9-
'context' => ['enable_max_depth' => true],
6+
'serializer' => [
7+
'default_serializer' => 'messenger.transport.symfony_serializer',
8+
'native_php_serializer' => [
9+
'base64_encode' => true,
10+
],
11+
'symfony_serializer' => [
12+
'format' => 'csv',
13+
'context' => ['enable_max_depth' => true],
14+
],
1015
],
1116
'transports' => [
1217
'default' => 'amqp://localhost/%2f/messages',

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'default_serializer' => 'messenger.transport.symfony_serializer',
6+
'serializer' => [
7+
'default_serializer' => 'messenger.transport.symfony_serializer',
8+
],
79
'transports' => [
810
'default' => 'amqp://localhost/%2f/messages',
911
'customised' => [

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
11+
<framework:serializer default-serializer="messenger.transport.symfony_serializer" />
1212
<framework:routing message-class="Symfony\Component\Messenger\Tests\Fixtures\DummyMessage">
1313
<framework:sender service="amqp" />
1414
<framework:sender service="audit" />

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
+8-6Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
12-
<framework:symfony-serializer format="csv">
13-
<framework:context>
14-
<framework:enable_max_depth>true</framework:enable_max_depth>
15-
</framework:context>
16-
</framework:symfony-serializer>
11+
<framework:serializer default-serializer="messenger.transport.symfony_serializer">
12+
<framework:native-php-serializer base64-encode="true" />
13+
<framework:symfony-serializer format="csv">
14+
<framework:context>
15+
<framework:enable_max_depth>true</framework:enable_max_depth>
16+
</framework:context>
17+
</framework:symfony-serializer>
18+
</framework:serializer>
1719
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
1820
</framework:messenger>
1921
</framework:config>

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
11+
<framework:serializer default-serializer="messenger.transport.symfony_serializer" />
1212
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
1313
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name" serializer="messenger.transport.native_php_serializer">
1414
<framework:options>
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
framework:
22
messenger:
3-
default_serializer: false
43
routing:
54
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
65
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
framework:
22
serializer: true
33
messenger:
4-
default_serializer: messenger.transport.symfony_serializer
4+
serializer:
5+
default_serializer: messenger.transport.symfony_serializer
56
routing:
67
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage': [amqp, audit]
78
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage':
+8-5Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
framework:
22
serializer: true
33
messenger:
4-
default_serializer: messenger.transport.symfony_serializer
5-
symfony_serializer:
6-
format: csv
7-
context:
8-
enable_max_depth: true
4+
serializer:
5+
default_serializer: messenger.transport.symfony_serializer
6+
native_php_serializer:
7+
base64_encode: true
8+
symfony_serializer:
9+
format: csv
10+
context:
11+
enable_max_depth: true
912
transports:
1013
default: 'amqp://localhost/%2f/messages'

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
framework:
22
serializer: true
33
messenger:
4-
default_serializer: messenger.transport.symfony_serializer
4+
serializer:
5+
default_serializer: messenger.transport.symfony_serializer
56
transports:
67
default: 'amqp://localhost/%2f/messages'
78
customised:

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,8 @@ public function testMessengerTransportConfiguration()
715715
$serializerTransportDefinition = $container->getDefinition('messenger.transport.symfony_serializer');
716716
$this->assertSame('csv', $serializerTransportDefinition->getArgument(1));
717717
$this->assertSame(['enable_max_depth' => true], $serializerTransportDefinition->getArgument(2));
718+
719+
$this->assertTrue($container->getDefinition('messenger.transport.native_php_serializer')->getArgument(0), 'base64_encode argument is correct');
718720
}
719721

720722
public function testMessengerWithMultipleBuses()

‎src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php
+14-1Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,20 @@ public function testEncodedIsDecodable()
2525

2626
$envelope = new Envelope(new DummyMessage('Hello'));
2727

28-
$this->assertEquals($envelope, $serializer->decode($serializer->encode($envelope)));
28+
$encoded = $serializer->encode($envelope);
29+
$this->assertContains("\0", $encoded['body'], 'Contains the raw, binary serialized data.');
30+
$this->assertEquals($envelope, $serializer->decode($encoded));
31+
}
32+
33+
public function testEncodedIsDecodableWithBase64()
34+
{
35+
$serializer = new PhpSerializer(true);
36+
37+
$envelope = new Envelope(new DummyMessage('Hello'));
38+
39+
$encoded = $serializer->encode($envelope);
40+
$this->assertNotContains("\0", $encoded['body'], 'Contains no binary data.');
41+
$this->assertEquals($envelope, $serializer->decode($encoded));
2942
}
3043

3144
public function testDecodingFailsWithMissingBodyKey()

‎src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php
+25-2Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121
*/
2222
class PhpSerializer implements SerializerInterface
2323
{
24+
private $base64Encode;
25+
26+
public function __construct(bool $base64Encode = false)
27+
{
28+
$this->base64Encode = $base64Encode;
29+
}
30+
2431
/**
2532
* {@inheritdoc}
2633
*/
@@ -30,16 +37,32 @@ public function decode(array $encodedEnvelope): Envelope
3037
throw new MessageDecodingFailedException('Encoded envelope should have at least a "body".');
3138
}
3239

33-
return $this->safelyUnserialize($encodedEnvelope['body']);
40+
$serializeEnvelope = $encodedEnvelope['body'];
41+
42+
if ($this->base64Encode) {
43+
$serializeEnvelope = base64_decode($encodedEnvelope['body']);
44+
45+
if (false === $serializeEnvelope) {
46+
throw new MessageDecodingFailedException('The "body" key could not be base64 decoded.');
47+
}
48+
}
49+
50+
return $this->safelyUnserialize($serializeEnvelope);
3451
}
3552

3653
/**
3754
* {@inheritdoc}
3855
*/
3956
public function encode(Envelope $envelope): array
4057
{
58+
$body = serialize($envelope);
59+
60+
if ($this->base64Encode) {
61+
$body = base64_encode($body);
62+
}
63+
4164
return [
42-
'body' => serialize($envelope),
65+
'body' => $body,
4366
];
4467
}
4568

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.