diff --git a/packages/router/src/RouteBindingInitializer.php b/packages/router/src/RouteBindingInitializer.php index 4d6f39a4b..b9f3b00fc 100644 --- a/packages/router/src/RouteBindingInitializer.php +++ b/packages/router/src/RouteBindingInitializer.php @@ -31,6 +31,10 @@ public function initialize(ClassReflector $class, null|string|UnitEnum $tag, Con } } + if ($parameter === null) { + throw new RouteBindingFailed(); + } + $object = $class->callStatic('resolve', $matchedRoute->params[$parameter->getName()]); if ($object === null) { diff --git a/packages/router/src/Routing/Construction/RoutingTree.php b/packages/router/src/Routing/Construction/RoutingTree.php index bb2f3c91c..e8f658ab3 100644 --- a/packages/router/src/Routing/Construction/RoutingTree.php +++ b/packages/router/src/Routing/Construction/RoutingTree.php @@ -51,7 +51,7 @@ private function isOptionalSegment(string $segment): bool private function stripOptionalMarker(string $segment): string { - return str_replace('?', '', $segment); + return preg_replace('/^\{\?/', '{', $segment); } /** @return array */ diff --git a/packages/router/src/UriGenerator.php b/packages/router/src/UriGenerator.php index 1d1cc92ae..0a9bdcd71 100644 --- a/packages/router/src/UriGenerator.php +++ b/packages/router/src/UriGenerator.php @@ -178,6 +178,10 @@ public function isCurrentUri(array|string|MethodReflector $action, mixed ...$par { $action = $this->normalizeActionToUri($action); + if (! $this->container->has(MatchedRoute::class)) { + return false; + } + $matchedRoute = $this->container->get(MatchedRoute::class); $candidateUri = $this->createUri($action, ...[...$matchedRoute->params, ...$params]); $currentUri = $this->createUri([$matchedRoute->route->handler->getDeclaringClass()->getName(), $matchedRoute->route->handler->getName()]);