Repository navigation
Expand file tree
/
Copy pathFilesystemFactory.php
More file actions
57 lines (50 loc) · 1.78 KB
/
Copy pathFilesystemFactory.php
File metadata and controls
57 lines (50 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact [email protected]
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
namespace Hyperf\Filesystem;
use Hyperf\Contract\ConfigInterface;
use Hyperf\Filesystem\Adapter\LocalAdapterFactory;
use Hyperf\Filesystem\Contract\AdapterFactoryInterface;
use Hyperf\Filesystem\Exception\InvalidArgumentException;
use League\Flysystem\Config;
use League\Flysystem\Filesystem;
use Psr\Container\ContainerInterface;
class FilesystemFactory
{
public function __construct(private ContainerInterface $container, private ConfigInterface $config)
{
}
public function get($adapterName): Filesystem
{
$options = $this->config->get('file', [
'default' => 'local',
'storage' => [
'local' => [
'driver' => LocalAdapterFactory::class,
'root' => BASE_PATH . '/runtime',
],
],
]);
$adapter = $this->getAdapter($options, $adapterName);
if (Version::isV2()) {
return new Filesystem($adapter, $options['storage'][$adapterName] ?? []);
}
return new Filesystem($adapter, new Config($options['storage'][$adapterName]));
}
public function getAdapter($options, $adapterName)
{
if (! $options['storage'] || ! $options['storage'][$adapterName]) {
throw new InvalidArgumentException("file configurations are missing {$adapterName} options");
}
/** @var AdapterFactoryInterface $driver */
$driver = $this->container->get($options['storage'][$adapterName]['driver']);
return $driver->make($options['storage'][$adapterName]);
}
}