diff --git a/src/DI/OrmExtension.php b/src/DI/OrmExtension.php index 9da67de1f..3d92fb8a3 100644 --- a/src/DI/OrmExtension.php +++ b/src/DI/OrmExtension.php @@ -35,6 +35,7 @@ * customDatetimeFunctions: array, * customHydrationModes: array, * classMetadataFactoryName: string|null, + * schemaIgnoreClasses: array|null, * defaultRepositoryClassName: string|null, * namingStrategy: string|Statement|null, * quoteStrategy: string|Statement|null, @@ -111,6 +112,7 @@ public function getConfigSchema(): Schema 'customDatetimeFunctions' => Expect::array(), 'customHydrationModes' => Expect::array(), 'classMetadataFactoryName' => Expect::string(), + 'schemaIgnoreClasses' => Expect::array(), 'defaultRepositoryClassName' => Expect::string(), 'namingStrategy' => (clone $expectService)->default(UnderscoreNamingStrategy::class), 'quoteStrategy' => (clone $expectService), diff --git a/src/DI/Pass/ManagerPass.php b/src/DI/Pass/ManagerPass.php index 77f5f18a2..46e2bca15 100644 --- a/src/DI/Pass/ManagerPass.php +++ b/src/DI/Pass/ManagerPass.php @@ -89,6 +89,11 @@ public function loadManagerConfiguration(string $managerName, mixed $managerConf $configuration->addSetup('setAutoGenerateProxyClasses', [$managerConfig->autoGenerateProxyClasses]); } + // configuration: schema ignore classes + if ($managerConfig->schemaIgnoreClasses !== null) { + $configuration->addSetup('setSchemaIgnoreClasses', [$managerConfig->schemaIgnoreClasses]); + } + // Configuration: proxy namespace if ($managerConfig->proxyNamespace !== null) { $configuration->addSetup('setProxyNamespace', [$managerConfig->proxyNamespace]); diff --git a/tests/Cases/DI/OrmExtension.schemaIgnoreClasses.phpt b/tests/Cases/DI/OrmExtension.schemaIgnoreClasses.phpt new file mode 100644 index 000000000..9cf00bee2 --- /dev/null +++ b/tests/Cases/DI/OrmExtension.schemaIgnoreClasses.phpt @@ -0,0 +1,121 @@ +withCompiler(function (Compiler $compiler): void { + $compiler->addExtension('nettrine.dbal', new DbalExtension()); + $compiler->addExtension('nettrine.orm', new OrmExtension()); + $compiler->addConfig([ + 'parameters' => [ + 'tempDir' => Tests::TEMP_PATH, + 'fixturesDir' => Tests::FIXTURES_PATH, + ], + ]); + $compiler->addConfig(Neonkit::load( + <<<'NEON' + nettrine.dbal: + connections: + default: + driver: pdo_sqlite + password: test + user: test + path: ":memory:" + nettrine.orm: + managers: + default: + connection: default + NEON + )); + }) + ->build(); + + /** @var EntityManager $entityManager */ + $entityManager = $container->getService('nettrine.orm.managers.default.entityManager'); + Assert::same([], $entityManager->getConfiguration()->getSchemaIgnoreClasses()); +}); + +// Schema Ignore Classes empty array +Toolkit::test(function (): void { + $container = ContainerBuilder::of() + ->withCompiler(function (Compiler $compiler): void { + $compiler->addExtension('nettrine.dbal', new DbalExtension()); + $compiler->addExtension('nettrine.orm', new OrmExtension()); + $compiler->addConfig([ + 'parameters' => [ + 'tempDir' => Tests::TEMP_PATH, + 'fixturesDir' => Tests::FIXTURES_PATH, + ], + ]); + $compiler->addConfig(Neonkit::load( + <<<'NEON' + nettrine.dbal: + connections: + default: + driver: pdo_sqlite + password: test + user: test + path: ":memory:" + nettrine.orm: + managers: + default: + schemaIgnoreClasses: [] + connection: default + NEON + )); + }) + ->build(); + + /** @var EntityManager $entityManager */ + $entityManager = $container->getService('nettrine.orm.managers.default.entityManager'); + Assert::same([], $entityManager->getConfiguration()->getSchemaIgnoreClasses()); +}); + +// Schema Ignore Classes one class +Toolkit::test(function (): void { + $container = ContainerBuilder::of() + ->withCompiler(function (Compiler $compiler): void { + $compiler->addExtension('nettrine.dbal', new DbalExtension()); + $compiler->addExtension('nettrine.orm', new OrmExtension()); + $compiler->addConfig([ + 'parameters' => [ + 'tempDir' => Tests::TEMP_PATH, + 'fixturesDir' => Tests::FIXTURES_PATH, + ], + ]); + $compiler->addConfig(Neonkit::load( + <<<'NEON' + nettrine.dbal: + connections: + default: + driver: pdo_sqlite + password: test + user: test + path: ":memory:" + nettrine.orm: + managers: + default: + connection: default + schemaIgnoreClasses: + - Tests\Mocks\Entity\DummyEntity + NEON + )); + }) + ->build(); + + /** @var EntityManager $entityManager */ + $entityManager = $container->getService('nettrine.orm.managers.default.entityManager'); + Assert::same(['Tests\Mocks\Entity\DummyEntity'], $entityManager->getConfiguration()->getSchemaIgnoreClasses()); +});