PHPackages                             snewer/yii2-storage - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. snewer/yii2-storage

ActiveYii2-extension[File &amp; Storage](/categories/file-storage)

snewer/yii2-storage
===================

5.0.1(6y ago)06382BSD-3-ClausePHP

Since Oct 8Pushed 6y ago1 watchersCompare

[ Source](https://github.com/snewer/yii2-storage)[ Packagist](https://packagist.org/packages/snewer/yii2-storage)[ RSS](/packages/snewer-yii2-storage/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependencies (1)Versions (12)Used By (2)

Установка
---------

[](#установка)

Компонент распространяется как [composer](http://getcomposer.org/download/) пакет и устанавливается командой

```
php composer.phar require snewer/yii2-storage

```

или добавлением

```
"snewer/yii2-storage": "*"
```

в composer.json файл проекта.

Настройка
---------

[](#настройка)

Задача компонента — предоставление интерфейса для реализации хранилищ и их использование.

Компонент имеет только одно свойство `buckets`, в котором необходимо указать массив конфигураций хранилищ.

**Важно!** Ключами массива являются названия хранилищ, по которым в дальнейшем получается экземпляр хранилища.

Пример подключения компонента в проект:

```
[
    // ...
    'components' => [
        //...
        'storage' => [
            'class' => 'snewer\storage\StorageManager',
            'buckets' => []
        ],
        //...
    ],
    // ...
]
```

Под хранилищем понимается реализация интерфейса абстрактного класса `snewer\storage\AbstractBucket` позволяющая:

- загрузить файл
- получить содержимое файла
- удалить файл
- получить web ссылку на файл

из какой-либо системы *(например, файловой)*или какого-либо сервиса *(например, Amazon AWS)*.

Таким образом, для реализации хранилища необходимо унаследоваться от абстрактного класса

```
snewer\storage\AbstractBucket
```

"Из коробки" доступен драйвер для локальной файловой системы

```
snewer\storage\drivers\FileSystemDriver
```

который имеет следующие свойства:

  Свойство Тип Обятательное Значение по-умолчанию Описание   basePath string Да Нет Папка в файловой системе, куда будут загружаться файлы.   baseUrl string | array Нет Нет  Url до папки загрузок. Можно указать массив из нескольких путей. Тогда для каждого файла будет равномерно и однозачно выбран один из путей. \*    depth int Нет 3 Количество подпапок, создаваемое в загрузочной директории. *\* Браузеры имеют лимит на одновременное подключение к серверу. Для преодоления лимита можно использовать различные домены, указывающие на один и тот же каталог.*

Пример настройки компонента с использованием хранилищ:

```
[
    // ...
    'components' => [
        //...
        'storage' => [
            'class' => 'snewer\storage\StorageManager',
            'buckets' => [
                'images' => [
                    'class' => 'snewer\storage\drivers\FileSystemDriver',
                    'basePath' => '@frontend/web/uploads/images/',
                    'baseUrl' => '@web/uploads/images/',
                    'depth' => 4
                ],
                'documents' => [
                    'class' => 'snewer\storage\drivers\FileSystemDriver',
                    'basePath' => '@frontend/web/uploads/documents/',
                    'baseUrl' => '@web/uploads/documents/',
                    'depth' => 4
                ],
                // ...
            ]
        ],
        //...
    ],
    // ...
]
```

Использование
-------------

[](#использование)

После настройки компонента использовать хранилище можно как через методы компонента, так и обращаясь непосредственно к объекту хранилища.

Пример реализации методов загрузки изображения и получения URL ссылки на него в модели изображения вашего проекта `app\models\Image`:

```
public static function upload($imageBinary)
{
    $path =  Yii::$app->storage->upload('images', $imageBinary, 'jpg');
    $model = new self;
    $model->path = $path;
    $model->save();
    return $model;
}
```

Далее, в той же модели, добавим метод получения ссылки на изображение:

```
public function getUrl()
{
    return Yii::$app->storage->getUrl('images', $this->path);
}
```

После чего можно загружать изображения следующим образом:

```
$image = app\models\Image::upload($imageBinary);
```

и выводить изображение в каком-либо представлении:

```
