dicr / yii2-file
Filesystem components for Yii2
Installs: 220
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Forks: 0
Type:yii2-extension
pkg:composer/dicr/yii2-file
Requires
- php: ~8.0
 - ext-fileinfo: *
 - ext-ftp: *
 - ext-iconv: *
 - ext-imagick: *
 - ext-mbstring: *
 - dicr/yii2-asset: ~3.0
 - yiisoft/yii2: ~2.0
 
Requires (Dev)
- league/flysystem: ~3.0
 - phpunit/phpunit: ~9.5
 - roave/security-advisories: dev-latest
 
Suggests
- ext-ftp: for LocalFileStore with ftp:// wrapper
 - ext-imagick: for creating thumbnails
 - ext-ssh2: for LocalFileStore with ssh2.sftp:// wrapper
 - ext-zip: for LocalFileStore with zip://wrapper
 - league/flysystem: for FlysystemFileStore
 
- dev-master
 - 8.1.9
 - 8.1.8
 - 8.1.7
 - 8.1.6
 - 8.1.5
 - 8.1.4
 - 8.1.3
 - 8.1.2
 - 8.1.1
 - 8.1.0
 - 8.0.1
 - 8.0.0
 - 7.0.4
 - 7.0.3
 - 7.0.2
 - 7.0.1
 - 7.0.0
 - 6.0.5
 - 6.0.4.2
 - 6.0.4.1
 - 6.0.4
 - 6.0.3
 - 6.0.2
 - 6.0.1
 - 6.0.0
 - 5.0.21
 - 5.0.20
 - 5.0.19
 - 5.0.18
 - 5.0.17
 - 5.0.16
 - 5.0.15
 - 5.0.14
 - 5.0.13
 - 5.0.12
 - 5.0.11
 - 5.0.10
 - 5.0.9
 - 5.0.8
 - 5.0.7
 - 5.0.6
 - 5.0.5
 - 5.0.4
 - 5.0.3
 - 5.0.2
 - 5.0.1
 - 5.0.0
 - 4.2.6
 - 4.2.5
 - 4.2.4
 - 4.2.3
 - 4.2.2
 - 4.2.1
 - 4.2.0
 - 4.1.9
 - 4.1.8
 - 4.1.7
 - 4.1.6
 - 4.1.5
 - 4.1.4
 - 4.1.3
 - 4.1.2
 - 4.1.1
 - 4.1.0
 - 4.0.19
 - 4.0.18
 - 4.0.17
 - 4.0.16
 - 4.0.15
 - 4.0.14
 - 4.0.13
 - 4.0.12
 - 4.0.11
 - 4.0.10
 - 4.0.9
 - 4.0.8
 - 4.0.7
 - 4.0.6
 - 4.0.5
 - 4.0.4
 - 4.0.3
 - 4.0.2
 - 4.0.1
 - 4.0.0
 - 3.1.6
 - 3.1.5
 - 3.1.4
 - 3.1.3
 - 3.1.2
 - 3.1.1
 - 3.1.0
 - 3.0.13
 - 3.0.12
 - 3.0.10
 - 3.0.9
 - 3.0.8
 - 3.0.7
 - 3.0.6
 - 3.0.5
 - 3.0.4
 - 3.0.3
 - 3.0.2
 - 3.0.1
 - 3.0.0
 - 2.0.7
 - 2.0.6
 - 2.0.5
 - 2.0.4
 - 2.0.3
 - 2.0.2
 - 2.0.0
 - 1.5.1
 - 1.5.0
 - 1.4.6
 - 1.4.5
 - 1.4.4
 - 1.4.3
 - 1.4.2
 - 1.4.1
 - 1.4.0
 - 1.3.4
 - 1.3.3
 - 1.3.2
 - 1.3.1
 - 1.2.1
 - 1.2.0
 - 1.1.1
 - 1.1.0
 - 1.0.7
 - 1.0.6
 - 1.0.5
 - 1.0.3
 - 1.0.2
 - 1.0.1
 
This package is auto-updated.
Last update: 2025-10-20 04:05:22 UTC
README
Содержит следующий функционал:
FileStore- абстракция файлового хранилища;LocaFileStore- реализация хранилища в локальной файловой системе;FtpFileStore- хранилище файлов на FTP;SftpFileStore- хранилище файлов через SFTP;FlysystemFileStore- хранилище через библиотеку Flysystem;
File- абстракция файла, поддержка операций с файлом;UploadFile- загрузка файлов в хранилище из другого файла или данных$_FILES;ThumbFile- создание превью картинок с кешем на диске;CSVFile- абстракция для работы с CSV-файлами;CSVResponseFormatter- формирование ответа в виде CSV-файла;
FileAttributeBehavior- поддержка файловых аттрибутов моделей;FileInputWidget- поддержка полей форм для загрузки и редактирования файлов/картинок аттрибутов моделей;
Работа с файловым хранилищем
Конфигурация компонента на примере локального хранилища файлов:
$config = [
    'components' => [
        // хранилище файлов
        'fileStore' => [
            'class' => dicr\file\LocalFileStore::class,
            'path' => '@webroot/files', // базовый путь на диске
            'url' => '@web/files' // базовый URL для скачивания (опционально)
        ]
    ]
];
Использование:
/** @var dicr\file\FileStore $store получаем настроенный компонент хранилища */
$store = Yii::$app->get('fileStore');
// или например хранилище в локальной файловой системе
$store2 = dicr\file\LocalFileStore::root();
// список файлов хранилища в директории pdf
$files = $store->list('pdf');
// Получаем файл по имени
$file = $store->file('pdf/my-report.pdf');
// выводим содержимое файла
echo $file->content;
// выводим url файла в хранилище
echo $file->url;
Создание превью картинок
Для работы с превью нужно настроить кеш картинок в локальной файловой системе:
$config = [
    'components' => [
        // хранилище для превью картинок
        'thumbStore' => [
            'class' => dicr\file\LocalFileStore::class,
            'path' => '@webroot/thumb',
            'url' => '@web/thumb',
        ],
    
        // основное хранилище файлов
        'fileStore' => [
            'class' => dicr\file\LocalFileStore::class,
            'path' => '@webroot/files',
            // конфигурация компонента для создания превью
            'thumbFileConfig' => [
                'store' => 'thumbStore', // компонент хранилища для кэша картинок
                'noimage' => '@webroot/res/img/noimage.png' // заглушка для создания превью несуществующих файлов моделей
            ]
        ]
    ]
];
Использование превью:
use yii\helpers\Html;
use dicr\file\FileStore;
/** @var FileStore $store */
$store = Yii::$app->get('fileStore');
// получаем файл из хранилища
$file = $store->file('images/image.jpg');
// выводим картинку превью
echo Html::img($file->thumb(['width' => 320, 'height' => 240])->url);
Файловые аттрибуты модели
Пример модели товара:
use yii\db\ActiveRecord;
use dicr\file\File;
use dicr\file\FileAttributeBehavior;
/**
 * @property-read ?File $image одна картинка
 * @property-read File[] $docs набор файлов документов
 * 
 * FileAttributeBehavior
 * 
 * @method bool loadFileAttributes($formName = null)
 * @method saveFileAttributes()
 * @method File|File[]|null getFileAttribute(string $attribute, bool $refresh = false)
 */
class Product extends ActiveRecord
{
    /**
     * @inheritDoc
     */
    public function behaviors() : array
    {
        return [
            // добавляем файловые аттрибуты
            'file' => [
                'class' => FileAttributeBehavior::class,
                'attributes' => [
                    'image' => 1, // одна картинка
                    'docs' => 0 // неограниченное кол-во файлов
                ]
            ]   
        ];       
    }
    /**
     * @inheritDoc
     */
    public function load($data, $formName = null) : bool
    {
        $ret = parent::load($data, $formName);
        // загружаем файловые аттрибуты
        if ($this->loadFileAttributes($formName)) {
            $ret = true;
        }
        return $ret;
    }
}
Использование файловых аттрибутов:
use dicr\file\UploadFile;use yii\db\ActiveRecord;use yii\helpers\Html;
/**
 * @var ActiveRecord $model
 */
// добавляем картинку товару
$model->image = new UploadFile('/tmp/newimage.jpg');
// сохраняем
$model->save();
// выводим превью картинки товара
echo Html::img((string)$model->image->thumb(['width' => 320, 'height' => 200]));
// выводим ссылки загрузки файлов товара
foreach ($model->docs ?: [] as $doc) {
    echo Html::a($doc->name, $doc->url);
}
Форма редактирования файлов товара:
use dicr\file\FileInputWidget;use yii\db\ActiveRecord;
use yii\widgets\ActiveForm;
/**
 * @var ActiveForm $form
 * @var ActiveRecord $model
 */
// поле с виджетом редактирования картинки
echo $form->field($model, 'image')->widget(FileInputWidget::class, [
  'layout' => 'images',
  'limit' => 1,
  'accept' => 'image/*',
  'removeExt' => true
]);
// поле с виджетом редактирования документов
echo $form->field($model, 'docs')->widget(FileInputWidget::class, [
  'layout' => 'files',
  'limit' => 0,
  'removeExt' => true
]);