PHP code example of oleg-chulakov-studio / yii2-filestorage

1. Go to this page and download the library: Download oleg-chulakov-studio/yii2-filestorage library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

oleg-chulakov-studio / yii2-filestorage example snippets


'fileStorage' => [
    'class' => \chulakov\filestorage\FileStorage::class,
    'storageBaseUrl' => false, // Базовый url
    'storagePath' => '@webroot', // Путь сохранения
    'storageDir' => 'uploaded',  // Папка с сохраняемыми файлами
    'fileMode' => 0755, // Уровень доступа к сохраняемым файлам
    'storagePattern' => '{group}/{id}', // Корневой шаблон генерации пути сохранения файлов
],
'imageComponent' => [
    'class' => \chulakov\filestorage\ImageComponent::class,
    'driver' => 'gd', // Базовые драйвера: gd и imagick
]

public function behaviors()
{
    return [
        [
            'class' => \chulakov\filestorage\behaviors\FileUploadBehavior::class, // Поведение
            'attribute' => 'image', // Атрибут модели
            'group' => 'photos', // Сохраняемая группа
            'type' => 'detail', // Тип файла в группе объектов
            'fileStorage' => 'fileStorage', // Компонент хранения файлов
            'repository' => \chulakov\filestorage\uploaders\UploadedFile::class, // Репозиторий
        ],
    ];
}

public function behaviors()
{
    return [
        [
            'class' => \chulakov\filestorage\behaviors\FileUploadBehavior::class, // подключаемое поведение
            'attribute' => 'image', // атрибут, куда будет помещен файл
            'group' => 'photos', // группа сохраняемого изображения
            'type' => 'detail', // тип сохраняемого изображения в группе
            'fileStorage' => 'fileStorage', // компонент хранения
            'repository' => \chulakov\filestorage\uploaders\UploadedFile::class, // выбранный загрузчик
            'repositoryOptions' => [ // опции репозитория
                'listeners' => [ // список слушателей
                    [
                        'class' => ThumbsManager::class, // Класс слушателя
                        'width' => 640, // Ширина
                        'height' => 480, // Высота
                        'encode' => 'jpg', // Расширение
                        'quality' => 100, // Качество в процентах
                        'watermarkPath' => '/path/to/image/watermark.png', // Наложенная водяная метка
                        'watermarkPosition' => Position::CENTER, // Позиция водяной метки
                        'imageComponent' => 'imageComponent', // Имя компонента для работы изображениями
                    ],
                    [
                        'class' => ImageManager::class, // Класс слушателя
                        'width' => 640, // Ширина
                        'height' => 480, // Высота
                        'encode' => 'jpg', // Расширение
                        'quality' => 100, // Качество в процентах
                        'watermarkPath' => '/path/to/image/watermark.png', // Наложенная водяная метка
                        'watermarkPosition' => Position::CENTER, // Позиция водяной метки
                        'imageComponent' => 'imageComponent', // Имя компонента для работы изображениями
                        'accessRole' => 'role_example', // Роль разрешенная для работы с изображениями
                    ]
                ],
            ]
        ],
    ];
}

    /**
     * Загрузка изображения через ajax запрос
     */
    public function actionIndex()
    {
        $form = new FileForm(); // Инициализация формы

        $request = \Yii::$app->request;

        if ($request->isPost) {
            $form->load(\Yii::$app->request->post(), ''); // Загрузка параметров
            if ($form->validate() && $form->upload()) { // Валидация и загрузка файлов
                return json_encode(['success' => true]); // Выдача сообщения о успешной загрузки
            }
        }

        throw new NotUploadFileException('Файл не был загружен.');
    }

    public function rules()
    {
        return [
            ['attachFile', FileValidator::class, 'targetAttribute' => 'attachedFile'],
            // ['attachFile', FileValidator::class, 'targetAttribute' => 'attachedFile', 'strict' => true],
        ];
    }

    public function safeUp()
    {
        $params = new UploadParams('group');

        $params->object_id = 123;
        $params->object_type = 'logo';

        $this->upload('/path/to/file.png', $params);
    }

public function behaviors()
{
    return [
        [
            'class' => \chulakov\filestorage\behaviors\FileUploadBehavior::class,
            'attribute' => 'image',
            'group' => 'photos',
            'modelClass' => \common\model\MyFileModel::class,
            'repositoryOptions' => [
                'events' => [
                    SaveModelEvent::BEFORE_MODEL_SAVE => [
                        [$this, 'fillModel'],
                    ],
                ],
            ]
        ],
    ];
}
public function fillModel(SaveModelEvent $event)
{
    /** @var \common\model\MyFileModel $model **/
    $model = $event->model;
    $model->comment = $this->comment;
    // или более безопасный способо
    if ($event->model->hasAttribute('comment')) {
        $event->model->setAttribute('comment', $this->comment);
    }
}
bash
php yii migrate/up --migrationPath=@vendor/oleg-chulakov-studio/yii2-filestorage/src/migrations