8000 Fix RequestContext not updated · symfony/symfony@7ad1c44 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7ad1c44

Browse files
committed
Fix RequestContext not updated
1 parent 414c78b commit 7ad1c44

File tree

2 files changed

+49
-28
lines changed

2 files changed

+49
-28
lines changed

src/Symfony/Component/Messenger/Middleware/RouterContextMiddleware.php

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
use Symfony\Component\Messenger\Envelope;
1515
use Symfony\Component\Messenger\Stamp\ConsumedByWorkerStamp;
1616
use Symfony\Component\Messenger\Stamp\RouterContextStamp;
17-
use Symfony\Component\Routing\RequestContext;
1817
use Symfony\Component\Routing\RequestContextAwareInterface;
1918

2019
/**
@@ -49,24 +48,41 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
4948
return $stack->next()->handle($envelope, $stack);
5049
}
5150

52-
$currentContext = $this->router->getContext();
51+
$context = $this->router->getContext();
52+
$currentBaseUrl = $context->getBaseUrl();
53+
$currentMethod = $context->getMethod();
54+
$currentHost = $context->getHost();
55+
$currentScheme = $context->getScheme();
56+
$currentHttpPort = $context->getHttpPort();
57+
$currentHttpsPort = $context->getHttpsPort();
58+
$currentPathInfo = $context->getPathInfo();
59+
$currentQueryString = $context->getQueryString();
5360

5461
/* @var RouterContextStamp $contextStamp */
55-
$this->router->setContext(new RequestContext(
56-
$contextStamp->getBaseUrl(),
57-
$contextStamp->getMethod(),
58-
$contextStamp->getHost(),
59-
$contextStamp->getScheme(),
60-
$contextStamp->getHttpPort(),
61-
$contextStamp->getHttpsPort(),
62-
$contextStamp->getPathInfo(),
63-
$contextStamp->getQueryString()
64-
));
62+
$context
63+
->setBaseUrl($contextStamp->getBaseUrl())
64+
->setMethod($contextStamp->getMethod())
65+
->setHost($contextStamp->getHost())
66+
->setScheme($contextStamp->getScheme())
67+
->setHttpPort($contextStamp->getHttpPort())
68+
->setHttpsPort($contextStamp->getHttpsPort())
69+
->setPathInfo($contextStamp->getPathInfo())
70+
->setQueryString($contextStamp->getQueryString())
71+
;
6572

6673
try {
6774
return $stack->next()->handle($envelope, $stack);
6875
} finally {
69-
$this->router->setContext($currentContext);
76+
$context
77+
->setBaseUrl($currentBaseUrl)
78+
->setMethod($currentMethod)
79+
->setHost($currentHost)
80+
->setScheme($currentScheme)
81+
->setHttpPort($currentHttpPort)
82+
->setHttpsPort($currentHttpsPort)
83+
->setPathInfo($currentPathInfo)
84+
->setQueryString($currentQueryString)
85+
;
7086
}
7187
}
7288
}

src/Symfony/Component/Messenger/Tests/Middleware/RouterContextMiddlewareTest.php

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
namespace Symfony\Component\Messenger\Tests\Middleware;
44

55
use Symfony\Component\Messenger\Envelope;
6+
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
67
use Symfony\Component\Messenger\Middleware\RouterContextMiddleware;
8+
use Symfony\Component\Messenger\Middleware\StackInterface;
9+
use Symfony\Component\Messenger\Middleware\StackMiddleware;
710
use Symfony\Component\Messenger\Stamp\ConsumedByWorkerStamp;
811
use Symfony\Component\Messenger\Stamp\RouterContextStamp;
912
use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase;
@@ -34,30 +37,32 @@ public function testMiddlewareStoreContext()
3437
public function testMiddlewareRestoreContext()
3538
{
3639
$router = $this->createMock(RequestContextAwareInterface::class);
37-
$originalContext = new RequestContext();
40+
$context = new RequestContext('', 'POST', 'github.com');
3841

3942
$router
4043
->expects($this->once())
4144
->method('getContext')
42-
->willReturn($originalContext);
43-
44-
$router
45-
->expects($this->exactly(2))
46-
->method('setContext')
47-
->withConsecutive(
48-
[$this->callback(function ($context) {
49-
$this->assertSame('symfony.com', $context->getHost());
50-
51-
return true;
52-
})],
53-
[$originalContext]
54-
);
45+
->willReturn($context);
5546

5647
$middleware = new RouterContextMiddleware($router);
5748
$envelope = new Envelope(new \stdClass(), [
5849
new ConsumedByWorkerStamp(),
5950
new RouterContextStamp('', 'GET', 'symfony.com', 'https', 80, 443, '/', ''),
6051
]);
61-
$middleware->handle($envelope, $this->getStackMock());
52+
53+
$nextMiddleware = $this->createMock(MiddlewareInterface::class);
54+
$nextMiddleware
55+
->expects($this->once())
56+
->method('handle')
57+
->willReturnCallback(function (Envelope $envelope, StackInterface $stack) use ($context): Envelope {
58+
$this->assertSame('symfony.com', $context->getHost());
59+
60+
return $envelope;
61+
})
62+
;
63+
64+
$middleware->handle($envelope, new StackMiddleware($nextMiddleware));
65+
66+
$this->assertSame('github.com', $context->getHost());
6267
}
6368
}

0 commit comments

Comments
 (0)
0