Загрузка изображений в Yii2 через редактор Imperavi

Добавление поля imageUpload в Imperavi

Итак, данный пост является кратким конспектом видео Максима Тимофеева на тему загрузки изображений через редактор imperavi. Ссылка на сам редактор: imperavi

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

	    $form->field($model, 'text')->widget(Widget::className(), [
        'settings' => [
            'lang' => 'ru',
            'minHeight' => 200,
            'plugins' => [
                'clips',
                'fullscreen',
            ],
            'imageUpload' => Url::to(['/site/save-redactor-img', 'sub' => 'blog']),
        ],
    ]);
	
Ключевое здесь:
		'imageUpload' => Url::to(['/site/save-redactor-img', 'sub' => 'blog'])
	

/site/save-redactor-img - это action actionSaveRedactorImg в контроллере SiteController, в котором собственно и будет реализовываться логика загрузки изображения.

Добавление yii2-image

Также необходимо добавить yii2-image. Тут всё просто:

		{
			"require": 
			{
		  		"yurkinx/yii2-image": "dev-master"
			}
		}
	
в composer.json. После чего выполняем:
composer update

Далее создаём новый alias в файле common/config/bootstrap.php(advanced-приложение)

Yii::setAlias('@images', dirname(dirname(__DIR__)) . '/frontend/web/uploads/images');

Ну и собственно код контроллера, отвечающего за загрузку файлов:

		public function actionSaveRedactorImg($sub = 'main')
	    {

	        $this->enableCsrfValidation = false;
	        if (Yii::$app->request->isPost) {
	            $dir = Yii::getAlias('@images') . '/' . $sub . '/';
	            if (!file_exists($dir)) {
	                FileHelper::createDirectory($dir);
	            }

	            $result_link = str_replace('admin', '', Url::home(true)) . 'uploads/images' . '/' . $sub . '/';
	            $file = UploadedFile::getInstanceByName('file');
	            $model = new DynamicModel(compact('file'));
	            $model->addRule('file', 'image')->validate();

	            if ($model->hasErrors()) {
	                $result = [
	                    'error' => $model->getFirstError('file')
	                ];
	            } else {
	                $model->file->name = strtotime('now') . '_' . Yii::$app->getSecurity()->generateRandomString(6) . '.' .
	                    $model->file->extension;
	                if ($model->file->saveAs($dir . $model->file->name)) {
	                    $imag = Yii::$app->image->load($dir . $model->file->name);
	                    $imag->resize(100, NULL, Yii\image\drivers\Image::PRECISE)
	                    ->save($dir . $model->file->name, 85);

	                    $result = ['filelink' => $result_link . $model->file->name, 'filename' => $model->file->name];
	                } else {
	                    $result = [
	                        'error' => Yii::t('vova07/imperavi', 'ERROR_CAN_NOT_UPLOAD_FILE')
	                    ];
	                }
	                Yii::$app->response->format = Response::FORMAT_JSON;
	                return $result;
	            }
	        } else {
	            throw new BadRequestHttpException('Only Post is allowed');
	        }
	    }
	

По материалам видео:

Тэги:

Тэг в списке: