From 8f646b84848f910a649a76f44b82234a36ebf89c Mon Sep 17 00:00:00 2001 From: Dmitry Pchelintsev <pchelic@mail.ru> Date: Wed, 3 Mar 2021 22:47:08 +0300 Subject: [PATCH] allow areas annotation for controller class (#1528) Co-authored-by: pchol <spchols@gmail.com> Co-authored-by: Guilhem Niot <guilhem@gniot.fr> --- Routing/FilteredRouteCollectionBuilder.php | 13 +++++++++---- .../Routing/FilteredRouteCollectionBuilderTest.php | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Routing/FilteredRouteCollectionBuilder.php b/Routing/FilteredRouteCollectionBuilder.php index 7e989ee..5a166c1 100644 --- a/Routing/FilteredRouteCollectionBuilder.php +++ b/Routing/FilteredRouteCollectionBuilder.php @@ -120,19 +120,24 @@ final class FilteredRouteCollectionBuilder return true; } - $method = $this->controllerReflector->getReflectionMethod( - $route->getDefault('_controller') ?? '' - ); - if (null === $method) { + $classAndMethod = $this->controllerReflector->getReflectionClassAndMethod($route->getDefault('_controller')); + + if (null === $classAndMethod) { return false; } + list($class, $method) = $classAndMethod; + /** @var Areas|null $areas */ $areas = $this->annotationReader->getMethodAnnotation( $method, Areas::class ); + if (null === $areas) { + $areas = $this->annotationReader->getClassAnnotation($class, Areas::class); + } + return (null !== $areas) ? $areas->has($this->area) : false; } } diff --git a/Tests/Routing/FilteredRouteCollectionBuilderTest.php b/Tests/Routing/FilteredRouteCollectionBuilderTest.php index 028c646..3f9b084 100644 --- a/Tests/Routing/FilteredRouteCollectionBuilderTest.php +++ b/Tests/Routing/FilteredRouteCollectionBuilderTest.php @@ -177,9 +177,10 @@ class FilteredRouteCollectionBuilderTest extends TestCase $routes->add($name, $route); $area = 'area'; + $reflectionClassStub = $this->createMock(\ReflectionClass::class); $reflectionMethodStub = $this->createMock(\ReflectionMethod::class); $controllerReflectorStub = $this->createMock(ControllerReflector::class); - $controllerReflectorStub->method('getReflectionMethod')->willReturn($reflectionMethodStub); + $controllerReflectorStub->method('getReflectionClassAndMethod')->willReturn([$reflectionClassStub, $reflectionMethodStub]); $annotationReader = $this->createMock(Reader::class); $annotationReader