diff --git a/src/EventListener/AttributesListener.php b/src/EventListener/AttributesListener.php index 14e14c6f..e5807089 100644 --- a/src/EventListener/AttributesListener.php +++ b/src/EventListener/AttributesListener.php @@ -27,12 +27,16 @@ public function onKernelRequest(RequestEvent $event): void $request = $event->getRequest(); $controller = $this->controllerResolver->getController($request); - if (!is_array($controller) || 2 !== count($controller)) { + if (true === \is_object($controller)) { + $class = new \ReflectionClass($controller); + $method = $class->getMethod('__invoke'); + } elseif (true === \is_array($controller) && 2 === \count($controller)) { + $class = new \ReflectionClass($controller[0]); + $method = $class->getMethod($controller[1]); + } else { return; } - $class = new \ReflectionClass($controller[0]); - $method = $class->getMethod($controller[1]); $attributes = []; $addAttributes = static function ($instance) use (&$attributes) { if ($key = match (get_class($instance)) { diff --git a/tests/Resources/Fixtures/InvokableController.php b/tests/Resources/Fixtures/InvokableController.php new file mode 100644 index 00000000..9ed56c4a --- /dev/null +++ b/tests/Resources/Fixtures/InvokableController.php @@ -0,0 +1,15 @@ +controller; + } +} diff --git a/tests/Unit/EventListener/AttributesListenerTest.php b/tests/Unit/EventListener/AttributesListenerTest.php new file mode 100644 index 00000000..124854bc --- /dev/null +++ b/tests/Unit/EventListener/AttributesListenerTest.php @@ -0,0 +1,68 @@ +createStub(HttpKernelInterface::class), + $request, + HttpKernelInterface::MAIN_REQUEST, + ); + + $listener->onKernelRequest($requestEvent); + + $this->assertRequestTags($request, $expectedTags); + } + + /** @return iterable */ + public static function supportedControllersProvider(): iterable + { + yield 'false' => [ + false, + [], + ]; + + yield 'invoke' => [ + new InvokableController(), + ['invoke-tag'], + ]; + + yield 'methode' => [ + [new MethodController(), 'showAction'], + ['method-tag'], + ]; + } + + /** @param string[] $expectedTags */ + private function assertRequestTags(Request $request, array $expectedTags): void + { + $this->assertSame( + $expectedTags, + \array_map( + static fn (Tag $tag): string => \implode($tag->getTags()), + $request->attributes->get('_tag', []), + ), + ); + } +}