floor12/yii2-module-files

Build Status Latest Stable Version Latest Unstable Version Total Downloads License

This readme is available in english.

Модуль позволяет добавить к ActiveRecord моделям поля с файлами и гибко управлять ими.

В поставку входят виджет для форм редактирования, а так же виджет для отображения приложенных файлов (его использовать не обязательно).

Установка

Ставим модуль

Выполняем команду

$ composer require floor12/yii2-module-files

иди добавляем в секцию “requred” файла composer.json

"floor12/yii2-module-files": ">=0.1.2"

Выполняем миграцию для созданию необходимых таблиц

$ ./yii migrate --migrationPath=@vendor/floor12/yii2-module-files/src/migrations/

Добавляем модуль в конфиг приложения

'modules' => [
            'files' => [
                'class' => 'floor12\files\Module',
                'storage' => '@vendor/../storage',
                'token_salt' => '!FgGGsdfsef23@Ejhfskj34',
            ],
        ],
    ...

Параметры:

Использование

Работа с моделью ActiveRecord

Для подключения модуля к модели ActiveRecord, необходимо назначить ей FileBehaviour и указать, в параметре attributes какие поля с файлами необходимо создать:

 public function behaviors()
 {
     return [
         'files' => [
             'class' => 'floor12\files\components\FileBehaviour',
             'attributes' => [
                 'avatar',
                 'documents'
             ],
         ],
         ...

Как и для других атрибутов модели, указываем ей attributeLabels():

 public function attributeLabels()
    {
        return [
            'avatar' => 'Аватар',
            'documents' => 'Документы',
        ];
    }

В rules() описываем правила валидации:

public function rules()
{
    return [
        ['avatar', 'required],
        ['avatar', ReformatValidator::class]            // Автоматически конвертирует PNG и JPG
        ['avatar', 'file', 'extensions' => ['jpg', 'png', 'jpeg', 'gif'], 'maxFiles' => 1, 'ratio'=>1], 
        ['docs', 'file', 'extensions' => ['docx','xlsx], 'maxFiles' => 10],
    ...    

Если maxFiles будет равен единице, то доступ к объекту floor12\files\models\File можно получить напрямую $model->avatar. Например:

echo Html::img($model->avatar->href)            // путь к файлу
echo Html::img($model->avatar->hrefPreview)     // путь к миниатюре, если это изображение
echo Html::img($model->avatar)                  // объект приводится к строке, содержащей путь к файлу для удобства

В случае, если maxFiles > 1 и файлов можно загрузить несколько, то поле будет содержать массив объектов floor12\files\models\File:

foreach ($model->docs as $doc}
    Html::a($doc->title, $doc->href);

Помимо этого, есть отдельный виджет для вывода всех файлов, который дает возможность просматривать изображения в галереи Lightbox2 и осуществлять предпросмотр файлов Office. Так же имеется возможно скачать все приложенные к модели файлы архивом. “`php echo \floor12\files\components\FilesBlock::widget([ ‘files’ => $model->docs, ‘title’ => ‘Приложенные документы:’, // по-умолчанию будет использован Label из модели ‘downloadAll’ => true, ‘zipTitle’ => “docs_of_model_” . $model->id ])


### Работа c виджетом формы Во время редактирования модели, необходимо использовать виджет `floor12\files\components\FileInputWidget`: ```php <?= $form->field($model, 'avatar')->widget(FileInputWidget::class, []) ?> <?= $form->field($model, 'docs')->widget(FileInputWidget::class, []) ?>

При этом, виджет сам примет нужный вид, в случае добавления одного или нескольких файлов. Если указан обязательный ratio для изображений, автоматически откроет окно с кропером изображений.