snewer/yii2-storage

storage

Установка

Компонент распространяется как composer пакет и устанавливается командой

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);

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

<img src="<?= $image->url ?>">

\ Пример реализации тех же методов с использованием объектов хранилищ:

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

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

\ Стоит заметить, что реализация метода getUrl не зависит от названия хранилища. То есть в рамках одной и той же модели можно организовать сложную логику хранения файлов в различных хранилищах и легким управлением ими.

Statistics

Downloads
GitHub Stars
GitHub Forks

Releases

Comments



5.0.1 is the latest of 11 releases



BSD-3-Clause license
Stats
0 github stars & 0 github forks
2 downloads in the last day
16 downloads in the last 30 days
404 total downloads