diff --git a/src/PendingRoutes/PendingRouteAction.php b/src/PendingRoutes/PendingRouteAction.php index a6f6690..9774d87 100644 --- a/src/PendingRoutes/PendingRouteAction.php +++ b/src/PendingRoutes/PendingRouteAction.php @@ -7,6 +7,7 @@ use Illuminate\Support\Str; use ReflectionAttribute; use ReflectionMethod; +use ReflectionNamedType; use ReflectionParameter; use Spatie\RouteDiscovery\Attributes\DiscoveryAttribute; use Spatie\RouteDiscovery\Attributes\Route; @@ -50,8 +51,8 @@ public function relativeUri(): string { /** @var ReflectionParameter $modelParameter */ $modelParameter = collect($this->method->getParameters())->first(function (ReflectionParameter $parameter) { - /** @phpstan-ignore-next-line */ - return is_a($parameter->getType()?->getName(), Model::class, true); + $type = $parameter->getType(); + return $type instanceof ReflectionNamedType && is_a($type->getName(), Model::class, true); }); $uri = ''; diff --git a/tests/DiscoverControllersTest.php b/tests/DiscoverControllersTest.php index 7ac66c7..2ac386e 100644 --- a/tests/DiscoverControllersTest.php +++ b/tests/DiscoverControllersTest.php @@ -4,6 +4,7 @@ use Spatie\RouteDiscovery\Discovery\Discover; use Spatie\RouteDiscovery\Tests\Support\TestClasses\Controllers\CustomMethod\CustomMethodController; use Spatie\RouteDiscovery\Tests\Support\TestClasses\Controllers\DefaultController\ControllerThatExtendsDefaultController; +use Spatie\RouteDiscovery\Tests\Support\TestClasses\Controllers\UsesUnionTypes\UnionController; use Spatie\RouteDiscovery\Tests\Support\TestClasses\Controllers\Single\MyController; it('can discover controller in a directory', function () { @@ -67,3 +68,19 @@ uri: 'my-prefix/my', ); }); + +it('can handle a union parameter', function() { + Discover::controllers() + ->useRootNamespace('Spatie\RouteDiscovery\Tests\\') + ->useBasePath($this->getTestPath()) + ->in(controllersPath('UsesUnionTypes')); + + $this + ->assertRegisteredRoutesCount(1) + ->assertRouteRegistered( + UnionController::class, + controllerMethod: 'example', + uri: 'union/example', + ); +}); + diff --git a/tests/Support/TestClasses/Controllers/UsesUnionTypes/UnionController.php b/tests/Support/TestClasses/Controllers/UsesUnionTypes/UnionController.php new file mode 100644 index 0000000..57aac4f --- /dev/null +++ b/tests/Support/TestClasses/Controllers/UsesUnionTypes/UnionController.php @@ -0,0 +1,14 @@ +