diff --git a/src/Adapter/AdapterDefinitionFactory.php b/src/Adapter/AdapterDefinitionFactory.php index fc4e6df..452adb0 100644 --- a/src/Adapter/AdapterDefinitionFactory.php +++ b/src/Adapter/AdapterDefinitionFactory.php @@ -26,9 +26,12 @@ final class AdapterDefinitionFactory */ private array $builders; - public function __construct() + /** + * @param list $builders + */ + public function __construct(array $builders) { - $this->builders = [ + $this->builders = array_merge([ new Builder\AsyncAwsAdapterDefinitionBuilder(), new Builder\AwsAdapterDefinitionBuilder(), new Builder\AzureAdapterDefinitionBuilder(), @@ -40,7 +43,7 @@ public function __construct() new Builder\SftpAdapterDefinitionBuilder(), new Builder\WebDAVAdapterDefinitionBuilder(), new Builder\BunnyCDNAdapterDefinitionBuilder(), - ]; + ], $builders); } public function createDefinition(string $name, array $options, ?string $defaultVisibilityForDirectories = null): ?Definition diff --git a/src/Adapter/Builder/AbstractAdapterDefinitionBuilder.php b/src/Adapter/Builder/AbstractAdapterDefinitionBuilder.php index 56b220c..498b74e 100644 --- a/src/Adapter/Builder/AbstractAdapterDefinitionBuilder.php +++ b/src/Adapter/Builder/AbstractAdapterDefinitionBuilder.php @@ -18,8 +18,6 @@ /** * @author Titouan Galopin - * - * @internal */ abstract class AbstractAdapterDefinitionBuilder implements AdapterDefinitionBuilderInterface { diff --git a/src/Adapter/Builder/AdapterDefinitionBuilderInterface.php b/src/Adapter/Builder/AdapterDefinitionBuilderInterface.php index 385e765..1b086a8 100644 --- a/src/Adapter/Builder/AdapterDefinitionBuilderInterface.php +++ b/src/Adapter/Builder/AdapterDefinitionBuilderInterface.php @@ -15,8 +15,6 @@ /** * @author Titouan Galopin - * - * @internal */ interface AdapterDefinitionBuilderInterface { diff --git a/src/DependencyInjection/FlysystemExtension.php b/src/DependencyInjection/FlysystemExtension.php index 1b20a33..144d702 100644 --- a/src/DependencyInjection/FlysystemExtension.php +++ b/src/DependencyInjection/FlysystemExtension.php @@ -17,6 +17,7 @@ use League\Flysystem\FilesystemWriter; use League\Flysystem\ReadOnly\ReadOnlyFilesystemAdapter; use League\FlysystemBundle\Adapter\AdapterDefinitionFactory; +use League\FlysystemBundle\Adapter\Builder\AdapterDefinitionBuilderInterface; use League\FlysystemBundle\Exception\MissingPackageException; use League\FlysystemBundle\Lazy\LazyFactory; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -30,6 +31,9 @@ */ final class FlysystemExtension extends Extension { + /** @var list */ + private array $adapterDefinitionBuilders = []; + public function load(array $configs, ContainerBuilder $container): void { $configuration = new Configuration(); @@ -43,9 +47,14 @@ public function load(array $configs, ContainerBuilder $container): void $this->createStoragesDefinitions($config, $container); } + public function addAdapterDefinitionBuilder(AdapterDefinitionBuilderInterface $builder): void + { + $this->adapterDefinitionBuilders[] = $builder; + } + private function createStoragesDefinitions(array $config, ContainerBuilder $container): void { - $definitionFactory = new AdapterDefinitionFactory(); + $definitionFactory = new AdapterDefinitionFactory($this->adapterDefinitionBuilders); foreach ($config['storages'] as $storageName => $storageConfig) { // If the storage is a lazy one, it's resolved at runtime diff --git a/tests/Adapter/AdapterDefinitionFactoryTest.php b/tests/Adapter/AdapterDefinitionFactoryTest.php index fb75ff2..77f61cd 100644 --- a/tests/Adapter/AdapterDefinitionFactoryTest.php +++ b/tests/Adapter/AdapterDefinitionFactoryTest.php @@ -32,7 +32,7 @@ public function provideConfigOptions(): \Generator */ public function testCreateDefinition($name, $options): void { - $factory = new AdapterDefinitionFactory(); + $factory = new AdapterDefinitionFactory([]); $definition = $factory->createDefinition($name, $options); $this->assertInstanceOf(Definition::class, $definition);