From 2c25293ba933d37a14f2db8229aa47bb75b10669 Mon Sep 17 00:00:00 2001 From: Marius J <57361575+MariusJam@users.noreply.github.com> Date: Sat, 13 Apr 2024 08:49:24 +0200 Subject: [PATCH] fix(symfony): context not serializable when session (#6302) * fix(symfony): context not serializable when session * phpstan --------- Co-authored-by: soyuka --- src/Symfony/Messenger/ContextStamp.php | 10 +++++++++- tests/Symfony/Messenger/ContextStampTest.php | 13 +++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Messenger/ContextStamp.php b/src/Symfony/Messenger/ContextStamp.php index 98e2570b4e1..6723b17c47f 100644 --- a/src/Symfony/Messenger/ContextStamp.php +++ b/src/Symfony/Messenger/ContextStamp.php @@ -13,6 +13,7 @@ namespace ApiPlatform\Symfony\Messenger; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Messenger\Stamp\StampInterface; /** @@ -22,8 +23,15 @@ */ final class ContextStamp implements StampInterface { - public function __construct(private readonly array $context = []) + private readonly array $context; + + public function __construct(array $context = []) { + if (($request = ($context['request'] ?? null)) && $request instanceof Request && $request->hasSession()) { + unset($context['request']); + } + + $this->context = $context; } /** diff --git a/tests/Symfony/Messenger/ContextStampTest.php b/tests/Symfony/Messenger/ContextStampTest.php index 9de929c7297..db185821785 100644 --- a/tests/Symfony/Messenger/ContextStampTest.php +++ b/tests/Symfony/Messenger/ContextStampTest.php @@ -15,6 +15,7 @@ use ApiPlatform\Symfony\Messenger\ContextStamp; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Messenger\Stamp\StampInterface; /** @@ -32,4 +33,16 @@ public function testGetContext(): void $contextStamp = new ContextStamp(); $this->assertIsArray($contextStamp->getContext()); } + + /** + * @doesNotPerformAssertions + */ + public function testSerializable(): void + { + $request = new Request(); + $request->setSessionFactory(function (): void {}); // @phpstan-ignore-line + + $stamp = new ContextStamp(['request' => $request]); + serialize($stamp); + } }