получение данных sqlite и firebase одновременно

Возможно, я немного опаздываю на этот вопрос, но вот способ использования встроенной файловой системы Laravel 5.

Я создал класс Manager, который расширяет файловый менеджер Laravel для обработки общедоступного поиска URL:

class FilesystemPublicUrlManager extends FilesystemManager
{

    public function publicUrl($name = null, $object_path = '')
    {
        $name = $name ?: $this->getDefaultDriver();
        $config = $this->getConfig($name);

        return $this->{'get' . ucfirst($config['driver']) . 'PublicUrl'}($config, $object_path);
    }

    public function getLocalPublicUrl($config, $object_path = '')
    {
        return URL::to('/public') . $object_path;
    }

    public function getS3PublicUrl($config, $object_path = '')
    {
        $config += ['version' => 'latest'];

        if ($config['key'] && $config['secret']) {
            $config['credentials'] = Arr::only($config, ['key', 'secret']);
        }

        return (new S3Client($config))->getObjectUrl($config['bucket'], $object_path);
    }
}

Затем я добавил этот класс в AppServiceProvider под регистрационным методом, чтобы он имел доступ к текущему экземпляру приложения:

$this->app->singleton('filesystemPublicUrl', function () {
    return new FilesystemPublicUrlManager($this->app);
});

Наконец, для простого статического доступа, Я создал класс Facade:

use Illuminate\Support\Facades\Facade;

class StorageUrl extends Facade
{

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'filesystemPublicUrl';
    }
}

Теперь я могу легко получить общедоступный url для моих общедоступных объектов в своей локальной и s3-файловой системах (обратите внимание, что я ничего не добавлял для ftp или rackspace в FilesystemPublicUrlManager):

$s3Url = StorageUrl::publicUrl('s3') //using the s3 driver
$localUrl = StorageUrl::publicUrl('local') //using the local driver
$defaultUrl = StorageUrl::publicUrl() //default driver
$objectUrl = StorageUrl::publicUrl('s3', '/path/to/object');
0
задан 2 January 2019 в 04:49
поделиться