diff --git a/CHANGELOG.md b/CHANGELOG.md index be1253b..9c433a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added - [GH#180](https://github.com/jolicode/automapper/pull/180) Add configuration to generate code with strict types +- [GH#183](https://github.com/jolicode/automapper/pull/183) Ability to change reload strategy from AutoMapper::create() ### Fixed - [GH#184](https://github.com/jolicode/automapper/pull/184) Fix error when mapping from stdClass to constructor with nullable/optional arguments diff --git a/src/AutoMapper.php b/src/AutoMapper.php index 45f9c00..c0c47e8 100644 --- a/src/AutoMapper.php +++ b/src/AutoMapper.php @@ -188,7 +188,7 @@ public static function create( if (null === $cacheDirectory) { $loader = new EvalLoader($mapperGenerator, $metadataFactory); } else { - $loader = new FileLoader($mapperGenerator, $metadataFactory, $cacheDirectory, $lockFactory); + $loader = new FileLoader($mapperGenerator, $metadataFactory, $cacheDirectory, $lockFactory, $configuration->reloadStrategy); } return new self($loader, $customTransformerRegistry, $metadataRegistry, $providerRegistry, $expressionLanguageProvider); diff --git a/src/Configuration.php b/src/Configuration.php index b2e42e7..98d929a 100644 --- a/src/Configuration.php +++ b/src/Configuration.php @@ -4,6 +4,8 @@ namespace AutoMapper; +use AutoMapper\Loader\FileReloadStrategy; + final readonly class Configuration { public function __construct( @@ -40,6 +42,10 @@ public function __construct( * Add declare(strict_types=1) to generated code. */ public bool $strictTypes = false, + /** + * The strategy to use to generate the mappers between each request. + */ + public FileReloadStrategy $reloadStrategy = FileReloadStrategy::ON_CHANGE, ) { } } diff --git a/src/Symfony/Bundle/DependencyInjection/AutoMapperExtension.php b/src/Symfony/Bundle/DependencyInjection/AutoMapperExtension.php index 2df4cd4..fe33942 100644 --- a/src/Symfony/Bundle/DependencyInjection/AutoMapperExtension.php +++ b/src/Symfony/Bundle/DependencyInjection/AutoMapperExtension.php @@ -67,6 +67,9 @@ public function load(array $configs, ContainerBuilder $container): void ->setArgument('$autoRegister', $config['auto_register']) ->setArgument('$mapPrivateProperties', $config['map_private_properties']) ->setArgument('$allowReadOnlyTargetToPopulate', $config['allow_readonly_target_to_populate']) + ->setArgument('$reloadStrategy', $reloadStrategy = FileReloadStrategy::from($config['loader']['reload_strategy'] ?? ( + $container->getParameter('kernel.debug') ? FileReloadStrategy::ALWAYS->value : FileReloadStrategy::NEVER->value + ))) ; if ($config['map_private_properties']) { @@ -83,13 +86,9 @@ public function load(array $configs, ContainerBuilder $container): void ->setAlias(ClassLoaderInterface::class, EvalLoader::class) ; } else { - $isDebug = $container->getParameter('kernel.debug'); - $generateStrategy = $config['loader']['reload_strategy'] ?? ($isDebug ? FileReloadStrategy::ALWAYS->value : FileReloadStrategy::NEVER->value); - $generateStrategy = FileReloadStrategy::tryFrom($generateStrategy); - $container ->getDefinition(FileLoader::class) - ->replaceArgument(4, $generateStrategy); + ->replaceArgument(4, $reloadStrategy); $container ->setAlias(ClassLoaderInterface::class, FileLoader::class)