snewer/yii2-storage

Storage component for Yii2 framework


Keywords
storage, yii2
License
BSD-3-Clause

Documentation

Установка

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ распространяСтся ΠΊΠ°ΠΊ 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 Π½Π΅ зависит ΠΎΡ‚ названия Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ хранСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ… ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠΈ.