From e12e3dbab1843118b20fc06ad79e6055491d9dfc Mon Sep 17 00:00:00 2001 From: Sergei Baikin Date: Tue, 16 Sep 2025 10:59:10 +0200 Subject: [PATCH] Update OperationAddress.php --- src/PSR7/OperationAddress.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/PSR7/OperationAddress.php b/src/PSR7/OperationAddress.php index 12a59b3b..a33203d1 100644 --- a/src/PSR7/OperationAddress.php +++ b/src/PSR7/OperationAddress.php @@ -113,7 +113,7 @@ public function parseParams(string $url): array $url = strtok($url, '?'); // 1. Find param names and build pattern - $pattern = $this->buildPattern($this->path(), $parameterNames); + $pattern = $this->buildPattern($this->path(), $parameterNames, $parameterNamesMatch); // 2. Parse param values if (! preg_match($pattern, $url, $matches)) { @@ -123,7 +123,7 @@ public function parseParams(string $url): array // 3. Combine keys and values $parsedParams = []; foreach ($parameterNames as $name) { - $parsedParams[$name] = $matches[$name]; + $parsedParams[$name] = $matches[$parameterNamesMatch[$name]]; } return $parsedParams; @@ -134,9 +134,10 @@ public function parseParams(string $url): array * * @param array|null $parameterNames */ - protected function buildPattern(string $url, ?array &$parameterNames): string + protected function buildPattern(string $url, ?array &$parameterNames, ?array &$parameterNamesMatch): string { $parameterNames = []; + $parameterNamesMatch = []; $pregParts = []; $inParameter = false; @@ -160,8 +161,10 @@ protected function buildPattern(string $url, ?array &$parameterNames): string } if ($inParameter) { - $pregParts[] = '(?<' . $part . '>[^/]+)'; + $partGroup = str_replace("-", "_", $part); + $pregParts[] = '(?<' . $partGroup . '>[^/]+)'; $parameterNames[] = $part; + $parameterNamesMatch[$part] = $partGroup; } else { $pregParts[] = preg_quote($part, '#'); }