diff --git a/src/Resources/config/services/route_loader.xml b/src/Resources/config/services/route_loader.xml index 390422c..e75f34b 100644 --- a/src/Resources/config/services/route_loader.xml +++ b/src/Resources/config/services/route_loader.xml @@ -16,5 +16,12 @@ + + + %sylius.resource.mapping% + + + + diff --git a/src/Routing/CrudRoutesAttributesLoader.php b/src/Routing/CrudRoutesAttributesLoader.php new file mode 100644 index 0000000..6270fdb --- /dev/null +++ b/src/Routing/CrudRoutesAttributesLoader.php @@ -0,0 +1,62 @@ +mapping = $mapping; + $this->resourceLoader = $resourceLoader; + $this->crudRoutesAttributesLoader = $crudRoutesAttributesLoader; + } + + public function __invoke(): RouteCollection + { + $routeCollection = new RouteCollection(); + $paths = $this->mapping['paths'] ?? []; + + /** @var string $className */ + foreach (ClassReflection::getResourcesByPaths($paths) as $className) { + $this->addRoutesForSyliusCrudRoutesAttributes($routeCollection, $className); + } + + return $routeCollection; + } + + private function addRoutesForSyliusCrudRoutesAttributes(RouteCollection $routeCollection, string $className): void + { + $attributes = ClassReflection::getClassAttributes($className, SyliusCrudRoutes::class); + + foreach ($attributes as $reflectionAttribute) { + $resource = Yaml::dump($reflectionAttribute->getArguments()); + $resourceRouteCollection = $this->resourceLoader->load($resource); + $routeCollection->addCollection($resourceRouteCollection); + } + } +}