1111
1212namespace League \FlysystemBundle \DependencyInjection ;
1313
14- use League \Flysystem \Cached \CachedAdapter ;
15- use League \Flysystem \Cached \Storage \Memory ;
16- use League \Flysystem \Cached \Storage \Psr6Cache ;
1714use League \Flysystem \Filesystem ;
1815use League \Flysystem \FilesystemInterface ;
1916use League \FlysystemBundle \Adapter \AdapterDefinitionFactory ;
20- use Symfony \Component \DependencyInjection \Alias ;
2117use Symfony \Component \DependencyInjection \ContainerBuilder ;
22- use Symfony \Component \DependencyInjection \ContainerInterface ;
2318use Symfony \Component \DependencyInjection \Definition ;
2419use Symfony \Component \DependencyInjection \Reference ;
2520use Symfony \Component \HttpKernel \DependencyInjection \Extension ;
@@ -36,51 +31,50 @@ public function load(array $configs, ContainerBuilder $container)
3631 $ configuration = new Configuration ();
3732 $ config = $ this ->processConfiguration ($ configuration , $ configs );
3833
39- $ this ->registerCacheProviders ($ container );
4034 $ this ->registerFilesystems ($ container , $ config ['filesystems ' ]);
4135
4236 // Create default filesystem alias
4337 if (!isset ($ config ['filesystems ' ][$ config ['default_filesystem ' ]])) {
4438 throw new \LogicException ('Default filesystem " ' .$ config ['default_filesystem ' ].'" is not defined in the "flysystem.filesystems" configuration key. ' );
4539 }
4640
47- $ defaultFsName = $ config ['default_filesystem ' ];
48- $ container ->setAlias (FilesystemInterface::class, 'flysystem.filesystem. ' .$ defaultFsName )->setPublic (false );
49- $ container ->setAlias ('flysystem ' , 'flysystem.filesystem. ' .$ defaultFsName )->setPublic (false );
50- }
51-
52- private function registerCacheProviders (ContainerBuilder $ container )
53- {
54- $ container ->setDefinition (
55- 'flysystem.cache.memory ' ,
56- (new Definition (Memory::class))
57- ->setPrivate (true )
58- );
59-
60- $ container ->setDefinition (
61- 'flysystem.cache.app ' ,
62- (new Definition (Psr6Cache::class))
63- ->setPrivate (true )
64- ->setArgument (0 , new Reference ('cache.app ' , ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE ))
65- );
41+ $ container ->setAlias (FilesystemInterface::class, $ config ['default_filesystem ' ])->setPublic (false );
42+ $ container ->setAlias ('flysystem ' , $ config ['default_filesystem ' ])->setPublic (false );
6643 }
6744
6845 private function registerFilesystems (ContainerBuilder $ container , array $ filesystems )
6946 {
70- $ definitionFactory = new AdapterDefinitionFactory ();
47+ $ adapterFactory = new AdapterDefinitionFactory ();
7148
7249 foreach ($ filesystems as $ fsName => $ fsConfig ) {
73- if ($ fsConfig ['adapter ' ] && $ fsConfig ['mounts ' ]) {
74- throw new \LogicException ('Definition of the filesystem " ' .$ fsName .'" is invalid: configuring both "adapter" and "mounts" keys is not allowed. ' );
75- }
76-
77- if ($ fsConfig ['adapter ' ]) {
78- $ adapterDefinition = $ definitionFactory ->createDefinition ($ fsConfig ['adapter ' ], $ fsConfig ['options ' ]);
79- } elseif ($ fsConfig ['mounts ' ]) {
80- $ adapterDefinition = $ definitionFactory ->createDefinition ('mount ' , $ fsConfig ['mounts ' ]);
50+ // Create adapter service definition
51+ if ($ adapter = $ adapterFactory ->createDefinition ($ fsConfig ['adapter ' ], $ fsConfig ['options ' ])) {
52+ // Native adapter
53+ $ container ->setDefinition ('flysystem.adapter. ' .$ fsName , $ adapter )->setPublic (false );
8154 } else {
82- throw new \LogicException ('Definition of the filesystem " ' .$ fsName .'" is invalid: one of the "adapter" and "mounts" keys is required. ' );
55+ // Custom adapter
56+ $ container ->setAlias ('flysystem.adapter. ' .$ fsName , $ fsConfig ['adapter ' ])->setPublic (false );
8357 }
58+
59+ // Create filesystem service definition
60+ $ definition = $ this ->createFilesystemDefinition (new Reference ('flysystem.adapter. ' .$ fsName ), $ fsConfig );
61+
62+ $ container ->setDefinition ($ fsName , $ definition );
63+ $ container ->registerAliasForArgument ($ fsName , FilesystemInterface::class, $ fsName )->setPublic (false );
8464 }
8565 }
66+
67+ private function createFilesystemDefinition (Reference $ adapter , array $ config )
68+ {
69+ $ definition = new Definition (Filesystem::class);
70+ $ definition ->setPublic (false );
71+ $ definition ->setArgument (0 , $ adapter );
72+ $ definition ->setArgument (1 , [
73+ 'visibility ' => $ config ['visibility ' ],
74+ 'case_sensitive ' => $ config ['case_sensitive ' ],
75+ 'disable_asserts ' => $ config ['disable_asserts ' ],
76+ ]);
77+
78+ return $ definition ;
79+ }
8680}
0 commit comments