Skip to content

Commit 8bd0702

Browse files
committed
[LiveComponent] Fix LiveUrl by replacing context when matching route
1 parent 337b860 commit 8bd0702

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

src/LiveComponent/src/Util/UrlFactory.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,24 @@ public function createFromPreviousAndProps(
6060

6161
private function createPath(string $previousUrl, array $props): string
6262
{
63-
return $this->router->generate(
64-
$this->router->match($previousUrl)['_route'] ?? '',
63+
$newPath = $this->router->generate(
64+
$this->matchRoute($previousUrl),
6565
$props
6666
);
67+
68+
return $newPath;
69+
}
70+
71+
private function matchRoute(string $previousUrl): string
72+
{
73+
$context = $this->router->getContext();
74+
$tmpContext = clone $context;
75+
$tmpContext->setMethod('GET');
76+
$this->router->setContext($tmpContext);
77+
$match = $this->router->match($previousUrl);
78+
$this->router->setContext($context);
79+
80+
return $match['_route'] ?? '';
6781
}
6882

6983
private function replaceQueryString($url, array $props): string

src/LiveComponent/tests/Unit/Util/UrlFactoryTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
1616
use Symfony\Component\Routing\Exception\MissingMandatoryParametersException;
1717
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
18+
use Symfony\Component\Routing\RequestContext;
1819
use Symfony\Component\Routing\RouterInterface;
1920
use Symfony\UX\LiveComponent\Util\UrlFactory;
2021

@@ -178,7 +179,13 @@ private function createRouterStub(
178179
array $props = [],
179180
): RouterInterface {
180181
$matchedRoute = 'default';
182+
$context = $this->createMock(RequestContext::class);
181183
$router = $this->createMock(RouterInterface::class);
184+
$router->expects(self::once())
185+
->method('getContext')
186+
->willReturn($context);
187+
$router->expects(self::exactly(2))
188+
->method('setContext');
182189
$router->expects(self::once())
183190
->method('match')
184191
->with($previousUrl)

0 commit comments

Comments
 (0)