Skip to content

Commit b2bb03c

Browse files
committed
feat: Allow custom adapter registration
This PR implements a solution to the issue discussed in thephpleague#181, enabling external bundles to register their custom storage adapters with Flysystem Bundle without requiring them to be directly added to the main bundle's codebase. I had to remove the `@internal` annotation from `AdapterDefinitionBuilderInterface` and `AbstractAdapterDefinitionBuilder` to allow them to be referenced by other bundles. External bundles can now register their adapters as follows: ``` php class AzureBlobStorageAdapterBundle extends Bundle { /** * {@inheritdoc} */ public function build(ContainerBuilder $container): void { parent::build($container); /** @var FlysystemExtension $extension */ $extension = $container->getExtension('flysystem'); $extension->addAdapterDefinitionBuilder(new AzureOssAdapterDefinitionBuilder()); } } ```
1 parent 0896389 commit b2bb03c

File tree

5 files changed

+17
-9
lines changed

5 files changed

+17
-9
lines changed

src/Adapter/AdapterDefinitionFactory.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@ final class AdapterDefinitionFactory
2727
*/
2828
private array $builders;
2929

30-
public function __construct()
30+
/**
31+
* @param list<AdapterDefinitionBuilderInterface> $builders
32+
*/
33+
public function __construct(array $builders)
3134
{
32-
$this->builders = [
35+
$this->builders = array_merge([
3336
new Builder\AsyncAwsAdapterDefinitionBuilder(),
3437
new Builder\AwsAdapterDefinitionBuilder(),
3538
new Builder\AzureAdapterDefinitionBuilder(),
@@ -41,7 +44,7 @@ public function __construct()
4144
new Builder\SftpAdapterDefinitionBuilder(),
4245
new Builder\WebDAVAdapterDefinitionBuilder(),
4346
new Builder\BunnyCDNAdapterDefinitionBuilder(),
44-
];
47+
], $builders);
4548
}
4649

4750
public function createDefinition(string $name, array $options, ?string $defaultVisibilityForDirectories = null): ?Definition

src/Adapter/Builder/AbstractAdapterDefinitionBuilder.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
/**
1818
* @author Titouan Galopin <galopintitouan@gmail.com>
19-
*
20-
* @internal
2119
*/
2220
abstract class AbstractAdapterDefinitionBuilder implements AdapterDefinitionBuilderInterface
2321
{

src/Adapter/Builder/AdapterDefinitionBuilderInterface.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
/**
1717
* @author Titouan Galopin <galopintitouan@gmail.com>
18-
*
19-
* @internal
2018
*/
2119
interface AdapterDefinitionBuilderInterface
2220
{

src/DependencyInjection/FlysystemExtension.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use League\Flysystem\FilesystemWriter;
1818
use League\Flysystem\ReadOnly\ReadOnlyFilesystemAdapter;
1919
use League\FlysystemBundle\Adapter\AdapterDefinitionFactory;
20+
use League\FlysystemBundle\Adapter\Builder\AdapterDefinitionBuilderInterface;
2021
use League\FlysystemBundle\Command\PullCommand;
2122
use League\FlysystemBundle\Command\PushCommand;
2223
use League\FlysystemBundle\Exception\MissingPackageException;
@@ -35,6 +36,9 @@
3536
*/
3637
final class FlysystemExtension extends Extension
3738
{
39+
/** @var list<AdapterDefinitionBuilderInterface> */
40+
private array $adapterDefinitionBuilders = [];
41+
3842
public function load(array $configs, ContainerBuilder $container): void
3943
{
4044
$configuration = new Configuration();
@@ -53,6 +57,11 @@ public function load(array $configs, ContainerBuilder $container): void
5357
$this->createStoragesDefinitions($config, $container);
5458
}
5559

60+
public function addAdapterDefinitionBuilder(AdapterDefinitionBuilderInterface $builder): void
61+
{
62+
$this->adapterDefinitionBuilders[] = $builder;
63+
}
64+
5665
private function registerPushCommand(ContainerBuilder $container): void
5766
{
5867
$container
@@ -75,7 +84,7 @@ private function registerPullCommand(ContainerBuilder $container): void
7584

7685
private function createStoragesDefinitions(array $config, ContainerBuilder $container): void
7786
{
78-
$definitionFactory = new AdapterDefinitionFactory();
87+
$definitionFactory = new AdapterDefinitionFactory($this->adapterDefinitionBuilders);
7988

8089
foreach ($config['storages'] as $storageName => $storageConfig) {
8190
// If the storage is a lazy one, it's resolved at runtime

tests/Adapter/AdapterDefinitionFactoryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public static function provideConfigOptions(): \Generator
117117
*/
118118
public static function testCreateDefinition($name, $options): void
119119
{
120-
$factory = new AdapterDefinitionFactory();
120+
$factory = new AdapterDefinitionFactory([]);
121121

122122
$definition = $factory->createDefinition($name, $options);
123123
self::assertInstanceOf(Definition::class, $definition);

0 commit comments

Comments
 (0)