From b4788e480889004a6e24ee43d93a6d1a68f09f0c Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Tue, 22 Jan 2019 15:29:52 -0500 Subject: [PATCH 1/4] introducing native php serialize() support for Messenger transport --- .../DependencyInjection/Configuration.php | 2 +- .../FrameworkExtension.php | 2 +- .../Resources/config/messenger.xml | 2 + .../Serialization/PhpSerializerTest.php | 29 ++++++++++++ .../Transport/Serialization/PhpSerializer.php | 45 +++++++++++++++++++ 5 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php create mode 100644 src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 1a8d6fb461991..b1849afde8360 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -1060,7 +1060,7 @@ function ($a) { }) ->end() ->children() - ->scalarNode('id')->defaultValue(!class_exists(FullStack::class) && class_exists(Serializer::class) ? 'messenger.transport.symfony_serializer' : null)->end() + ->scalarNode('id')->defaultValue('messenger.transport.native_php_serializer')->end() ->scalarNode('format')->defaultValue('json')->end() ->arrayNode('context') ->normalizeKeys(false) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 679064b8cc043..8a1ec7bb5cd49 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1529,7 +1529,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder } else { if ('messenger.transport.symfony_serializer' === $config['serializer']['id']) { if (!$this->isConfigEnabled($container, $serializerConfig)) { - throw new LogicException('The default Messenger serializer cannot be enabled as the Serializer support is not available. Try enabling it or running "composer require symfony/serializer-pack".'); + 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') diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index 9d8a0ff74dd42..9f87bc8f26e11 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -24,6 +24,8 @@ + + diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php new file mode 100644 index 0000000000000..d3f1da25e456c --- /dev/null +++ b/src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Tests\Transport\Serialization; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage; +use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer; + +class PhpSerializerTest extends TestCase +{ + public function testEncodedIsDecodable() + { + $serializer = new PhpSerializer(); + + $envelope = new Envelope(new DummyMessage('Hello')); + + $this->assertEquals($envelope, $serializer->decode($serializer->encode($envelope))); + } +} diff --git a/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php b/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php new file mode 100644 index 0000000000000..955b6f5467be7 --- /dev/null +++ b/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Transport\Serialization; + +use Symfony\Component\Messenger\Envelope; +use Symfony\Component\Messenger\Exception\InvalidArgumentException; + +/** + * @author Ruyan Weaver + * + * @experimental in 4.2 + */ +class PhpSerializer implements SerializerInterface +{ + /** + * {@inheritdoc} + */ + public function decode(array $encodedEnvelope): Envelope + { + if (empty($encodedEnvelope['body'])) { + throw new InvalidArgumentException('Encoded envelope should have at least a "body".'); + } + + return unserialize($encodedEnvelope['body']); + } + + /** + * {@inheritdoc} + */ + public function encode(Envelope $envelope): array + { + return [ + 'body' => serialize($envelope), + ]; + } +} From 4132bfebe7ffb36985001f641c74e039510d248e Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 23 Jan 2019 09:12:31 -0500 Subject: [PATCH 2/4] updating CHANGELOGs and fixing tests --- src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md | 6 ++++++ .../Bundle/FrameworkBundle/Resources/config/messenger.xml | 2 +- .../Tests/DependencyInjection/ConfigurationTest.php | 3 +-- .../Tests/DependencyInjection/FrameworkExtensionTest.php | 2 +- src/Symfony/Component/Messenger/CHANGELOG.md | 6 ++++++ .../Messenger/Transport/Serialization/PhpSerializer.php | 2 +- 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 2dd441182d15d..098f168e3b8df 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -7,6 +7,12 @@ CHANGELOG * Not passing the project directory to the constructor of the `AssetsInstallCommand` is deprecated. This argument will be mandatory in 5.0. + * [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`. + 4.2.0 ----- diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index 9f87bc8f26e11..d092728399cd2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -24,7 +24,7 @@ - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 453ccf449dd11..d8acb04909809 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -19,7 +19,6 @@ use Symfony\Component\Config\Definition\Processor; use Symfony\Component\Lock\Store\SemaphoreStore; use Symfony\Component\Messenger\MessageBusInterface; -use Symfony\Component\Serializer\Serializer; class ConfigurationTest extends TestCase { @@ -295,7 +294,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'routing' => [], 'transports' => [], 'serializer' => [ - 'id' => !class_exists(FullStack::class) && class_exists(Serializer::class) ? 'messenger.transport.symfony_serializer' : null, + 'id' => 'messenger.transport.native_php_serializer', 'format' => 'json', 'context' => [], ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 862786c9b8b80..6d3563d0781c9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -660,7 +660,7 @@ public function testMessengerRouting() /** * @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException - * @expectedExceptionMessage The default Messenger serializer cannot be enabled as the Serializer support is not available. Try enabling it or running "composer require symfony/serializer-pack". + * @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() { diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index eb1268e25e818..75a185a13a303 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -1,6 +1,12 @@ CHANGELOG ========= +4.3.0 +----- + + * Added `PhpSerializer` which uses PHP's native `serialize()` and + `unserialize()` to serialize messages to a transport + 4.2.0 ----- diff --git a/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php b/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php index 955b6f5467be7..ec6176c85ddca 100644 --- a/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php +++ b/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php @@ -15,7 +15,7 @@ use Symfony\Component\Messenger\Exception\InvalidArgumentException; /** - * @author Ruyan Weaver + * @author Ryan Weaver * * @experimental in 4.2 */ From 3111cef9a48e5fc5a09df94b685109c8f9be100e Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 24 Jan 2019 12:03:31 -0800 Subject: [PATCH 3/4] Update src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml Co-Authored-By: weaverryan --- .../Bundle/FrameworkBundle/Resources/config/messenger.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index d092728399cd2..92ec3b555e4d3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -24,7 +24,7 @@ - + From 97e2e32af4b60b9077fc63af6b6f310190380e97 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Fri, 25 Jan 2019 10:06:51 -0500 Subject: [PATCH 4/4] Changing default serializer in Messenger component to PhpSerializer --- src/Symfony/Component/Messenger/CHANGELOG.md | 4 ++++ .../Component/Messenger/Transport/AmqpExt/AmqpReceiver.php | 4 ++-- .../Component/Messenger/Transport/AmqpExt/AmqpSender.php | 4 ++-- .../Component/Messenger/Transport/AmqpExt/AmqpTransport.php | 4 ++-- .../Messenger/Transport/AmqpExt/AmqpTransportFactory.php | 4 ++-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 75a185a13a303..ff901be210f10 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG * Added `PhpSerializer` which uses PHP's native `serialize()` and `unserialize()` to serialize messages to a transport + * [BC BREAK] If no serializer were passed, the default serializer + changed from `Serializer` to `PhpSerializer` inside `AmqpReceiver`, + `AmqpSender`, `AmqpTransport` and `AmqpTransportFactory`. + 4.2.0 ----- diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpReceiver.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpReceiver.php index 7ed1fae405819..fdd81cac543ab 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpReceiver.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpReceiver.php @@ -13,7 +13,7 @@ use Symfony\Component\Messenger\Transport\AmqpExt\Exception\RejectMessageExceptionInterface; use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface; -use Symfony\Component\Messenger\Transport\Serialization\Serializer; +use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer; use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; /** @@ -32,7 +32,7 @@ class AmqpReceiver implements ReceiverInterface public function __construct(Connection $connection, SerializerInterface $serializer = null) { $this->connection = $connection; - $this->serializer = $serializer ?? Serializer::create(); + $this->serializer = $serializer ?? new PhpSerializer(); } /** diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php index 88b99ebb063a4..74ab0dfaa92aa 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php @@ -13,7 +13,7 @@ use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Transport\Sender\SenderInterface; -use Symfony\Component\Messenger\Transport\Serialization\Serializer; +use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer; use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; /** @@ -31,7 +31,7 @@ class AmqpSender implements SenderInterface public function __construct(Connection $connection, SerializerInterface $serializer = null) { $this->connection = $connection; - $this->serializer = $serializer ?? Serializer::create(); + $this->serializer = $serializer ?? new PhpSerializer(); } /** diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php index 8e27fb90d866e..36967c8459dca 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php @@ -12,7 +12,7 @@ namespace Symfony\Component\Messenger\Transport\AmqpExt; use Symfony\Component\Messenger\Envelope; -use Symfony\Component\Messenger\Transport\Serialization\Serializer; +use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer; use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; use Symfony\Component\Messenger\Transport\TransportInterface; @@ -31,7 +31,7 @@ class AmqpTransport implements TransportInterface public function __construct(Connection $connection, SerializerInterface $serializer = null) { $this->connection = $connection; - $this->serializer = $serializer ?? Serializer::create(); + $this->serializer = $serializer ?? new PhpSerializer(); } /** diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php index b958726ea55c8..477aaf1c551aa 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Messenger\Transport\AmqpExt; -use Symfony\Component\Messenger\Transport\Serialization\Serializer; +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; @@ -28,7 +28,7 @@ class AmqpTransportFactory implements TransportFactoryInterface public function __construct(SerializerInterface $serializer = null, bool $debug = false) { - $this->serializer = $serializer ?? Serializer::create(); + $this->serializer = $serializer ?? new PhpSerializer(); $this->debug = $debug; } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy