From 816aa4fb8670d8ff1bbe9777e4b70ebbb1142788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Besir=20Hora=CC=81c=CC=8Cek?= Date: Thu, 1 Feb 2024 13:49:04 +0100 Subject: [PATCH] Feat: support of custom annotation loader --- src/Core/DI/Plugin/CoreSchemaPlugin.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Core/DI/Plugin/CoreSchemaPlugin.php b/src/Core/DI/Plugin/CoreSchemaPlugin.php index 74f8e3b..3fb915c 100644 --- a/src/Core/DI/Plugin/CoreSchemaPlugin.php +++ b/src/Core/DI/Plugin/CoreSchemaPlugin.php @@ -3,6 +3,7 @@ namespace Apitte\Core\DI\Plugin; use Apitte\Core\DI\Loader\DoctrineAnnotationLoader; +use Apitte\Core\DI\Loader\ILoader; use Apitte\Core\DI\Loader\NeonLoader; use Apitte\Core\Schema\SchemaBuilder; use Apitte\Core\Schema\Serialization\ArrayHydrator; @@ -63,6 +64,7 @@ protected function getConfigSchema(): Schema 'loaders' => Expect::structure([ 'annotations' => Expect::structure([ 'enable' => Expect::bool(true), + 'loader' => Expect::string(DoctrineAnnotationLoader::class), ]), 'neon' => Expect::structure([ 'enable' => Expect::bool(false), @@ -112,10 +114,17 @@ protected function loadSchema(SchemaBuilder $builder): SchemaBuilder { $loaders = $this->config->loaders; - //TODO - resolve limitation - Controller defined by one of loaders cannot be modified by other loaders - if ($loaders->annotations->enable) { - $loader = new DoctrineAnnotationLoader($this->getContainerBuilder()); + + if (!class_exists($loaders->annotations->loader)) { + throw new \RuntimeException(sprintf('Annotation loader class %s does not exist', $loaders->annotations->loader)); + } + + if (!is_subclass_of($loaders->annotations->loader, ILoader::class)) { + throw new \RuntimeException(sprintf('Annotation loader class %s must be subclass of %s', $loaders->annotations->loader, ILoader::class)); + } + + $loader = new $loaders->annotations->loader($this->getContainerBuilder()); $builder = $loader->load($builder); }