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

Skip to content

Commit 4b109c3

Browse files
committed
Fix RequestContext not updated
1 parent 414c78b commit 4b109c3

File tree

2 files changed

+51
-28
lines changed

2 files changed

+51
-28
lines changed

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

Lines changed: 31 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,43 @@ 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+
$currentContext = [
53+
$context->getBaseUrl(),
54+
$context->getMethod(),
55+
$context->getHost(),
56+
$context->getScheme(),
57+
$context->getHttpPort(),
58+
$context->getHttpsPort(),
59+
$context->getPathInfo(),
60+
$context->getQueryString(),
61+
];
5362

5463
/* @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-
));
64+
$context
65+
->setBaseUrl($contextStamp->getBaseUrl())
66+
->setMethod($contextStamp->getMethod())
67+
->setHost($contextStamp->getHost())
68+
->setScheme($contextStamp->getScheme())
69+
->setHttpPort($contextStamp->getHttpPort())
70+
->setHttpsPort($contextStamp->getHttpsPort())
71+
->setPathInfo($contextStamp->getPathInfo())
72+
->setQueryString($contextStamp->getQueryString())
73+
;
6574

6675
try {
6776
return $stack->next()->handle($envelope, $stack);
6877
} finally {
69-
$this->router->setContext($currentContext);
78+
$context
79+
->setBaseUrl($currentContext[0])
80+
->setMethod($currentContext[1])
81+
->setHost($currentContext[2])
82+
->setScheme($currentContext[3])
83+
->setHttpPort($currentContext[4])
84+
->setHttpsPort($currentContext[5])
85+
->setPathInfo($currentContext[6])
86+
->setQueryString($currentContext[7])
87+
;
7088
}
7189
}
7290
}

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