Skip to content

Latest commit

 

History

History
97 lines (74 loc) · 3.65 KB

README_RU.md

File metadata and controls

97 lines (74 loc) · 3.65 KB

dropzone-widget

Виджет для удобной загрузки файлов, с помощью известной библиотеки DropZone.js.

Данный виджет отличается от многих тем, что:

  1. Все работает, в том числе конвертация массива php в объект JS.
  2. Не выбрасывает скрипты в тело html - документа, чем грешат большинство виджетов на yii2

Последние изменения:

  1. Добавлена возможность обработки событий

Installation

Устанавлиевается решение с помощью композера.

Введите команду:

composer require dastanaron/yii2-dropzone-widget "@dev" --prefer-dist 

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

Сначала добавить модуль в main.php:

<?php
    'modules' => [       
        //other modules //--//--//--//
        'dynamikjs' => [
            'class' => 'dastanaron\dropzone\DynamicJSModule'
        ],
    ]

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

<?=dastanaron\dropzone\DropZoneWidget::widget([
        'id' => 'myDropZone', //ID на div элементе
        'site_url' => 'http://site.com/', //Если используется генерация JS файла, то обязательно указать
        'generateJSFile' => true, //Генерация js файла (по умолчанию - включена)
        'options'=> [
            'url' => '/file-upload/image-upload', //Куда посылать запрос на сохранение файла
            'maxFiles' => 1, //Максимальное количество файлов
            'acceptedFiles' => 'image/*', //MIME - типы файлов
        ],
        'events' => [
            'success' => 'function(event, response) {
                console.log("success")
                $("input#inputid").val(response.id);
            }',
        ],
])?>

В массив опций, вы можете указывать все опции, доступные в dropZoneLib, список опций

В массив events, вы можете передать функции для обработки dropZone.on("event", function() {}) ключом будет ваше событие, а функция - функция переданная для обработки указанного события. События dropZone указаны здесь

Пример контролера принятия данных, подробно здесь:

<?php

use Yii;
use yii\web\Controller;
use backend\models\UploadImage;
use yii\web\UploadedFile;

class DynamikjsController extends Controller
{
 public function actionImageUpload()
    {
        $model = new UploadImage();

        if (Yii::$app->request->isPost) {
            $model->file = UploadedFile::getInstanceByName('file');
            if ($model->upload()) {
                return 'ok';
            }
        }

        Yii::$app->response->setStatusCode(400);
        return 'error';
    }
}