pozitronik / yii2-filestorage
Filestorage module for YII2
Installs: 3 172
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 2
Open Issues: 0
Type:yii2-extension
Requires
- php: >=8.0
- pozitronik/yii2-badgewidget: ^2.0.0
- pozitronik/yii2-traits: ^1.0.5
Requires (Dev)
- kartik-v/yii2-widget-select2: dev-master
- yiisoft/yii2: dev-master
- yiisoft/yii2-bootstrap4: 2.0.10
Suggests
- yiisoft/yii2-bootstrap: for yii2-filestorage extensions to work with Bootstrap 3.x version
- yiisoft/yii2-bootstrap4: for yii2-filestorage to work with Bootstrap 4.x version
README
Filestorage module for YII2
Installation
The preferred way to install this extension is through composer.
Run
php composer.phar require pozitronik/yii2-filestorage "dev-master"
or add
"pozitronik/yii2-filestorage": "dev-master"
to the require section of your composer.json
file.
Requirements
Yii2, PHP >= 7.4.0
Usage
Конфигурация модуля должна задаваться в web.php и console.php (для корректного выполнения миграции):
'filestorage' => [ 'class' => FSModule::class, 'defaultRoute' => 'index', 'params' => [ 'tableName' => 'sys_file_storage',//используемая таблица хранения метаданных 'tableNameTags' => 'sys_file_storage_tags',//используемая таблица хранения тегов 'base_dir' => '@app/web/uploads/',//каталог хранения файлов 'models_subdirs' => true,//файлы каждой модели кладутся в подкаталог с именем модели 'name_subdirs_length' => 2//если больше 0, то файлы загружаются в подкаталоги по именам файлов (параметр регулирует длину имени подкаталогов) ] ]
после конфигурирования выполняем миграцию:
yii migrate --migrationPath=@vendor/pozitronik/yii2-filestorage/migrations
Логика: добавляем FileStorageTrait к любому наследнику Model::class. Он добавляет классу атрибут UploadedFile $uploadFileInstance, а также методы
uploadFile(array $tags = [], string $instanceName = 'uploadFileInstance'):array //добавление файла с заданным набором тегов.
и
files(?array $tags = null):array //получение списка загрузок по заданному набору тегов.
Мультизагрузка пока не реализована.
При загрузке через uploadFile, загрузка привязывается к модели. Для ActiveRecord привязка происходит непосредственно к экземпляру класса, для обычных моделей -- ко всему классу. Тег -- произвольная метка, добавляемая загрузке. Одной загрузке может быть добавлено произвольное количество тегов. К модели может быть добавлено произвольное количество загрузок с одинаковым набором тегов. Через это реализована версионность: последняя загрузка считается актуальной, остальные -- предыдущими версиями, доступными отдельно).
Метод files() вернёт список всех загрузок модели (опционально -- только по указанным тегам). У каждой загрузки доступны
- метод download() -- отдаёт скачку привязанного к загрузке файла
- атрибут $versions -- отдаёт нумерованный список версий этой загрузки (где 0 -- наиболее актуальная).
Демо - в @vendor/src/controllers/IndexController.php, там так или иначе показаны все фичи.
Для непосредственной загрузки указываем атрибут fileUploadInstance и делаем save()