Задать вопрос

Особенности настройки Krajee FileInput widget для Yii2?

Здравствуйте, есть такой плагин для Yii2 Krajee FileInput Widget demos.krajee.com/widget-details/fileinput для загрузки файлов.

Вопрос, пожалуй, для тех, кто в нем разбирается.
Честно скажу, плаваю в его настройках как пудовая гиря в пруду.

Нужно получить следующий результат:

1. Файл должен загружаться без перезагрузки страница, т.е. с использованием Ajax
2. В виджете крайне желательно использовать стандартную модель UploadForm
<?php
namespace app\models;

use Yii;
use yii\base\Model;
use yii\web\UploadedFile;

class UploadForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $imageFile;

    public function rules()
    {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => ['jpg', 'png']],
        ];
    }

    public function upload()
    {
        if ($this->validate()) {
            $this->imageFile->saveAs(Yii::getAlias('@app').'/web/img/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
            return true;
        } else {
            return false;
        }
    }
}


Пока, что, мой настроенный виджет выглядит примерно так:
echo FileInput::widget([
                'model' => $model,
                'attribute' => 'imageFile[]',
                'pluginOptions' => [
                    'uploadUrl' => Url::to(['/site/upload']),
                ],
            ]);


В контроллере в actionUpload прописан стандартный код для загрузки формы:
$model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if ($model->upload()) {
                // file is uploaded successfully
                return;
            }
        }

        return $this->render('upload', ['model' => $model]);


Короче говоря, при попытке загрузить файл чего то не получается, в добавок ко всему в консоли браузера выдается сообщение:
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check xhr.spec.whatwg.org/.

Собственно говоря нужна помощь в настройке виджета...
  • Вопрос задан
  • 3850 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
kimono
@kimono
Web developer
Во-первых: вы используете 'attribute' => 'imageFile[]',, а это означает, что нужно исправить:
В контроллере:
$model->imageFile = UploadedFile::getInstances($model, 'imageFile');
Yii::$app->response->format = Response::FORMAT_JSON;
if ($model->upload()) {
  return ['error' => null];
}

В модели:
/**
* @var UploadedFile[]
*/
public $imageFile;

foreach ($this->imageFile as $imageFile){
  $imageFile->saveAs(Yii::getAlias('@app').'/web/img/' . $imageFile->baseName . '.' . $imageFile->extension);
}
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы