Yii2 ckeditor с загрузкой изображений


Yii2 KCFinder: как загрузить изображения в каталог «Common» или «Frontend»

Я столкнулся с проблемой. Я использую CKEditor для создания HTML-редактора, а также KCFinder для загрузки и вставки изображений в HTML-редактор. Моя проблема заключается в том, что я не могу показать изображения, которые я загрузил через KCFinder, на моем сайте FrontEnd

Мой код (В бэкэнд /view/_form)

Теперь мой код может работать правильно, но изображения будут загружены на «backend/web/upload». Как загрузить изображения через KCFinder в «frontend/web/upload»? Или есть ли какое-либо предложение для решения? Мне нужно использовать CKEditor + KCFinder для создания новостной формы, после чего я могу показать контент на веб-сайте Frontend. Большое спасибо за Вашу помощь.

Наконец, я нашел решение. Я создал ссылку, используя команду:

После этого я редактировал httpd-vhosts.conf, чтобы разрешить «Опции +FollowSymlinks».

Не забудьте перезапустить службу apache. 🙂

Посмотрите, что Yii2 предоставил нам интерфейс и бэкэнд для нашего использования. Я рекомендую забыть, что он сейчас в бэкэнд.
что вы можете сделать, это установить параметр, который перейдет в backend/web/updloads и сохранить имена файлов только в db. Я имею в виду имя файла/путь после папки загрузки. как это:

Это будет ваш bakcend: backend.example.com/uploads/и имена файлов в вашем db после загрузки: file.jpg, profile/firstuser.png.

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

Видишь, я знаю, что это не пишущие решения, но это сработало для меня. Я думаю, это поможет мне.

Это мой первый ответ, пожалуйста, спросите, не ясен ли я 🙂

Yii2: Загрузка изображений и удаление через AJAX

Давайте рассмотрим как в Yii2 прикреплять изображения к статье, обновлять их и удалять через AJAX. Я предполагаю что у вас уже сгенерированн CRUD для ваших задач.

Для начала создадим новую ячейку в БД в моём случае это бует таблица posts и ячейку я назову «logo». Тип Varchar длина 512, allow null.

Модель

В модели необходимо создать публичную переменную в которую мы будем передавать загружаемое изображение. Добвааляем её в класс модели models/Posts.php:

Далее в правилах валидации добавим правило для нашего файла: [[‘file’], ‘file’], В моём случае набор правил будет выглядеть вот так:

Представление

Теперь давайте перейдём в наше представление views/posts/_form.php и в самом верху подключим хелперы:

Будьте внимательны, если вы создавали ваш CRUD не в ручную а например при помощи Gii то скорей всего хелпер yii\helpers\Html; у вас уже подключен и подключать его повторно не следует.

В параметрах формы необходимо указать что мы будем передавать файлы:

Теперь давайте создадим поле для загрузки изображения. Обратите внимание поле будет передавать данные в ранее созданую нами публичную переменную $file в модели Posts что бы затем контроллер мог сохранить отдельно файл в папку на сервере и записать имя файла в объект, а затем сохранить его в БД.

Далее прямо над полем для загрузки размещаем небольшой виджет который будет отображать загруженное изображение при просмотре статьи:

Давайте разберёмся что тут у нас происходит? Данный виджет будет виден только при редактировании уже ранее созданой статьи и только в том случае, если к статье уже было ранее добавленно изображение: if(!empty($model->logo)). Далее мы вызываем html хелпер Html::img который будет выдавать код типа и с качестве первого параметра принимает путь к файлу: Html::img($model->logo как раз наше изображение. Второй параметр у нас отвечает за размер изображения.

Контроллер

Для начала давайте подключим недостающий хелпер который занимается загрузкой файлов в Yii2:

Теперь необходимо в двух экшенах контроллера (созжание и обновление) необходимо добавить обработку передаваемого файла изображения. Для этого в экшенах public function actionCreate и public function actionUpdate сразу после строчки: if ($model->load(Yii::$app->request->post()) && $model->save()) <добавляем вот такой код:

Давайте разберём его. В данном методе $imageName = time(); я получаю текущий тайм штам типа 1486298642 я буду использовать его как часть имени файла, что бы избежать конфликта одинаковых имён на сервере. Далее мы передаём в наш объект модели наш файл полученный из формы: $model->file = UploadedFile::getInstance($model, ‘file’); через метод хелпер UploadedFile. Далее задаём условие, если файл загружен if(!empty($model->file)) сохраняем его в папку uploads в публичной директории сервера: $model->file->saveAs(‘uploads/blog_’.$imageName.’.’.$model->file->extension); затем к ранее созданному нами штампу добавляем префикс blog_ в результате загруженные файлы будут иметь имена вида blog_486298642 и затем добавляем точку и расширение оригинального файла ‘.’.$model->file->extension.

Теперь обратите внимание мы наконец отходим от работы с самим файлом который ранее хранился в переменной $file и передаём его имя и путь в объект модели в виде строки: $model->logo = ‘uploads/blog_’.$imageName.’.’.$model->file->extension; Собственно осталось только сохранить данное состояние объекта $model->save(); что бы данные записались в БД. Это акупльно как в случае создания, так и обновления материала. Давайте ещё раз вернёмся на три строки выше к условию if(!empty($model->file)) мы его создали на тот случай, когда при обновлении материала мы не меняем текущее изображение или его вовсе нет. Без данного условия мы-бы получили ошибку о попытке передать пустой объект.

Удаление изображения через AJAX

Теперь давайте реализуем возможность удаления прикреплённого изображения без перезагрузки страницы, что весма полезно при обновлении материалов. Для начала, здесь же в контроллере создадим новый метод, который мы в дальнейшем и будем вызывать через AJAX запрос. Привожу полный код экшена:

Как видно из кода в качестве агрумента мы передаём >findModel($ >logo; Которые получаем из экземпляра объекта. Затем вызываем стандартный метод php — unlink() с параметром пути, который удаляет файл на сервере. Далее присваиваем экземпляру объекта значение null в для изображения и обновляем экземпляр модели $model->update(); в случае ели всё прошло успешно возвращяем строку Deleted которая будет отображена в форме.

Как видно из кода мы снова прибегли к помощи html хелпера для создания ссылки с AJAX запросом. Далее мы вызываем роутер которвый обращается к экшену удаления [‘posts/deleteimage’ и передаём переменную с id нашего объекта ‘id’ => $model->id]. Теперь после клика по ссылке отработает наш экшен на удаление и вернёт там ответ. В случае успеха сработает вот эта интересная часть AJAX:

Топ-пост этого месяца:  Число россиян, обучающихся в онлайне, увеличилось вдвое

Первая строка получит return из экшена где мы написали Deleted и отобразит его на экране, а вторая строка уберёт элемент картинки из DOM страницы.

Вот собственно и всё, теперь вы можете не засорять ваш сервер уже несуществующими изображениями.

P.S.

Это черновик статьи написвнный на скорую руку для закрепления только что проделанного опыта. Если у вас возникнут вопросы из за плохого изложения материала, или предложения по улучшению пожалуйста оставьте ваши комментарии.

PHP, Javascript & CSS

Блог веб-разработчика

CKEditor и загрузка графических файлов

«CKEditor — лучший текстовый редактор для каждого» (c) (The best web text editor for everyone). CKEditor — бесплатный визуальный кросплатформенный браузерный редактор — часто используется для внесения форматированного текста в различных системах управления контента (CMS). Редактор хорошо настраиваемый, но в последней редакции (версия 4 на момент написания поста) нет функционала загрузки фотографий через сам редактор. Сейчас мы с вами размеремся, как исправить это недостаток.

Загрузка картинок не представлена, потому что редактор вообще не имеет серверных скриптов, необходимых для загруки файлов на сервер. Непонятно какие причины подвигли авторов редактора отключение этого функционала (в предыдущих версиях он существовал), но без загрузки изображений редактор доьтавляет определенные проблемы в офромлении текста. К счастью возможноть подлючения своих серверных сриптов осталась, нужно только включить ее. Не будем вдаваться в подробности конфигурирования редактора, а сразу укажем какие опции надо добавить для этого.

Итак открываем файл config.php , который находится в корне папки редактора и добавляем две строки (38, 39)

Строка 38 указывает редактору подключить функционала загрузки файла в диалоге ввода картинки, строка 39 подключает функционал выбора уже загруженной картинки.

У нас редактор установлен в папку /js/ckeditor/ сайта. Там же мы создали папку php для наших серверных скриптов, эта папка должна иметь разрешение на выполнение для php скриптов.

Yii2 ckeditor с загрузкой изображений

Share your plugin with the rest of the community!

Easy Image

Images automatically
rescaled, optimized, responsive and delivered through a CDN.

CKFinder

Enrich CKEditor with image
and file uploads

Upload Image

  • Categories: Clipboard , Contents , Tools
  • Author: CKSource
  • License: GPL, LGPL, MPL, CKSource CDL

Updated: 26 Sep 2020

  • Documentation
  • Demo
  • Source code
  • Issues tracker

This plugin enables support for uploading images that were dropped or pasted into the editor. See the live demo.

The upload is implemented in a non-blocking way, so while the image is being uploaded the user may continue editing the content.


This plugin can be combined with a file manager such as CKFinder to provide image storage, browser and editor capabilities.

This plugin is based on the Upload Widget plugin which allows to create more upload widgets, for example, for handling different file types.

546,663 546663 downloads (view stats)

This is an official plugin provided and supported by CKEditor developers.

You can submit bug reports directly to its GitHub issues tracker and discuss any integration issues on StackOverflow.

Online builder

The recommended way to install all CKEditor add-ons is to create a custom build by using Online builder. To do that, click the Add to my editor button on the plugin page. When you are done, click the Build my editor button on the right side of the page to go to Online builder.

Note: This add-on is already selected to be a part of your current build.

Add-on installation instructions

If you want to add the plugin manually, you will need to:

  1. Extract the downloaded plugin .zip into the plugins folder of your CKEditor installation. Example:
  2. Enable the plugin by using the extraPlugins configuration setting. Example:
  3. Download and configure all its dependencies, too.

README

Установка

Так как у меня не получилось нормально реализовать зависимость от пакета CKEditor, бог его знает почему. Вам придется самим добавить зависимость от данного пакета в вашем composer.json Я обычно прописываю зависимость от полного пакета последней версии.

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

Можно создавать свои пресеты, которые будут хранить настройки вашего редактора, для этого нужно будет сначала определить папку где будут лежать файлы с пресетами (стандартный путь «@app/ckeditor-presets»).

Пример кода пресета и вызова виджета:

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

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

По умолчанию разрешена загрузка только файлов с расширениями: «png, jpg, jpeg, bmp, gif, ico, swf», файлы загружаются по пути: ‘@webroot/upload’. Если же необходимо изменить данные параметры, то в массиве params приложения можно определить свои параметры, а именно:

В настройках виджета можно подключить сторонние плагины для CKEditor, для этого необходимо в пресете добавить массив ‘externalPlugins’ c содержимым следующего формата:

Yii2 KCFinder : How to upload images to “Common” or “Frontend” directory

I run into a problem. I use CKEditor to crete HTML Editor and also use KCFinder to upload&insert images within the HTML editor. My problem is, I cannot show the images,that i uploaded via KCFinder, in my FrontEnd website

My code (In backend/view/_form)

Now my code can work correctly but the images will be uploaded to «backend/web/upload» How can i upload the images via KCFinder to «frontend/web/upload» ? Or Is there any suggestion solution for the case? I need to use CKEditor+KCFinder to create a news form then I can show the content in Frontend Website. Thank you very much for your help.

2 Answers 2

Look the Yii2 provided both frontend/backend for our use. i recommend forget that it is in backend for now.
what you can do is set param which will go to backend/web/updloads and save file names only in db i mean file name/path after upload folder. like this :

This will be your bakcend : backend.example.com/uploads/ and file names in your db after upload : file.jpg, profile/firstuser.png.

when you able to access it from the frontend just copy your upload folder from backend to frontend.

See i know this is not write solutions however it worked for me. i think it will help me .

This is my first answer please ask if i am unclear 🙂

Yii2-CKEditor (полный визуальный редактор)

skeeks/yii2-ckeditor

CKEditor это готовый к использованию HTML текстовый редактор предназначен для упрощения создания веб-контента. Это визуальный редактор, который приносит функции процессора общее слово непосредственно в веб-страницы.

Время публикации: вторник, 30 июня 2015 г. (4 года назад)

Актуальная версия: 1.1.4
21 янв. 2020 г., 11:50:25 (9 месяцев назад)

CKEditor это готовый к использованию HTML текстовый редактор предназначен для упрощения создания веб-контента. Это визуальный редактор, который приносит функции процессора общее слово непосредственно в веб-страницы.

CKEditor Widget for Yii2

Installation

The preferred way to install this extension is through composer.

Топ-пост этого месяца:  Секреты, фишки и лайфхаки в Instagram в 2020

to the require section of your application’s composer.json file.

Skins & Plugins

This widget works with default’s dev-full/stable branch of CKEditor, with a set of plugins and skins. If you wish to configure a different skins or plugins that the one proposed, you will have to download them separately and configure the widget’s clientOptions attribute accordingly.

Usage

The library comes with two widgets: CKEditor and CKEditorInline . One is for classic edition and the other for inline editing respectively.

Using a model with a basic preset:

Further Information

Please, check the CKEditor plugin site documentation for further information about its configuration options.

Загрузка изображений в Ckeditor 4 для Laravel 5.3

В небольших проектах, где требуется минимальный функционал от wysiwyg редактора, я использую стандартную версию Ckeditor. ckeditor позволяет вставлять в текст изображения, загружая их перед этим на сервер. Обычно этим занимается файловый менеджер, который открывается при нажатии на кнопку «Обзор файлов»

Но иногда функционал файлового менеджера избыточен. Требуется просто выбрать файл на компьютере, загрузить его и вставить в текст. Для этого используется плагин uploadimage, который необходимо подключить к ckeditor. Удобно сразу сконфигурировать ckeditor с этим плагином, чтобы не мучаться с разрешением зависимостей этого плагина. Uploadimage добавляет новую вкладку в окно вставки изображения.

Чтобы плагин заработал, нужно в конфигурационном файле ckeditor config.js необходимо прописать путь до обработчика загрузок изображений на сервере.

public/ckeditor/config.js

На этом настройка ckeditor завершена. Теперь реализуем функционал загрузки на сервере. Добавим новый роут в файле web.php . Для упрощения и наглядности, код загрузки изображения я не буду выносить в отдельный контроллер, а напишу прямо роутах.

routes/web.php

Здесь я валидирую входящие данные, и, если валидация пройдена, загружаю изображение в папку public/uploads . Т.к. используется Laravel 5.3, то изображение сохраняется в папку storage , которая не доступна из Web. Поэтому необходимо создать симлинк в эту папку командой php artisan storage:link . Всё это подробно описано в документации: https://laravel.com/docs/5.3/filesystem#the-public-disk.

Т.к. ckeditor присылает изображение POST запросом, а laravel проверяет CSRF токен, который ckeditor не передаёт, необходимо вписать только что созданный роут в исключения, чтобы laravel не проверял token:

Загрузка файлов в Yii

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

Задача сводится к следующему. Нужен удобный механизм загрузки файлов и картинок на сервер (включая необходимые проверки), создание миниатюр для картинок и автоматическая генерация тегов img и ссылок на скачивание файла. В расширениях ничего подходящего не нашлось. Наиболее близким по смыслу является расширение upload, но и оно не предоставляет ряда необходимых функций. Так что решил писать сам. Прямо перед публикацией статьи случайно увидел рецепт, в котором рассматривается похожая идея.


Примеры кода даны только для ознакомления, я вставлял их из работающего проекта, но мог что-нибудь перепутать. Если нужен работающий код, в конце статьи есть ссылка на проект. Итак, вперед!

Первая итерация. Дополняем стандартный функционал.

Что предлагает Yii? Во-первых, класс CUploadedFile, предоставляющий информацию о загруженном файле и позволяющий сохранять его на сервер. Во-вторых, валидатор CFileValidator, выполняющий проверку загруженного файла. Вот как официальная документация рекомендует загружать файлы:

У такого подхода есть ряд недостатков:

  1. Во фреймворке нет специально выделенной папки для загрузки файлов
  2. Загрузку файлов приходится каждый раз описывать в контроллере
  3. Указанный подход не может быть перенесен на actionUpdate() , поскольку ожидает загрузки файла при каждом вызове. А с файлами было бы удобно работать как с обычными свойствами — загрузить при создании модели и при необходимости перезагрузить при ее изменении.
  4. Нет рекомендаций относительно последующего обращения к файлу. Впрочем, path/to/localFile можно хранить в свойстве модели.

Разумеется, я говорю об этих недостатках только в контексте собственных проектов. И вот что хочу предложить.

Для начала определимся с местом для сохранения файлов. На мой взгляд, для хранения файлов лучше всего подойдет директория . /protected/data/files . Вообще говоря, для файлов, создающихся в процессе работы, существует папка . /protected/runtime , но по смыслу директория data больше подходит для этих целей. Имя файла будем генерировать случайным образом ( uniqid() ) и сохранять в свойстве модели $modMyModel->id_image , в следующих абзацах расскажу как. Правда у такого подхода есть один подводный камень — директория data закрыта для обращений из браузера. Как быть с этим — чуть позже. Забегая вперед, файлы для скачивания предлагаю выдавать динамически через readfile() , а картинки (точнее, миниатюры картинок) — публиковать в папке assets .

С папкой и именованием файлов разобрались. Теперь разберемся с валидацией и загрузкой. Начнем с формы. Сделаем так:

Так мы будем видеть, загружен ли файл. А сам файл будет грузиться с именем id_image_file . Вместо echo $modMyModel->id_image можно будет вставить ссылку для скачивания файла или миниатюру картинки.

Теперь валидация. Идея такова: валидатор должен проверить, есть ли в $_FILES загруженный файл с именем id_image_file . Если есть, то создать объект CUploadedFile и записать его в $modMyModel->id_image . После чего выполнить валидацию $modMyModel->id_image стандартным способом. Для этого создадим свой валидатор DFileValidator , унаследованный от CFileValidator . И сразу еще один — DImageValidator , унаследованный от DFileValidator , в котором укажем типы файлов по умолчанию для картинок.

И, наконец, загрузка файла и сохранение модели. После валидации загруженный файл будет находиться в $modMyModel->id_image , причем в виде CUploadedFile . Для того чтобы загрузка не была привязана к конкретному свойству, нужно перед сохранением модели проверить, являются ли какие-либо ее свойства объектами класса CUploadedFile , и если являются — загрузить их и сохранить адреса. Теперь модель будет выглядеть так:

Свойство image было заменено свойством id_image сознательно. Дальше будет понятно почему.

Подведем промежуточный итог
  1. Все файлы сохраняются в папке . /protected/data/files со случайными именами.
  2. Загузка файла выполняется в модели, перед сохранением в базе данных.
  3. Чтобы пометить свойство как файл, нужно:
    1. В rules() модели назначить этому свойству валидатор DFileValidator .
    2. В форме переименовать инпут для этого свойства, дописав к нему ‘_file’ .

  4. Методы actionCreate() и actionUpdate() контроллера можно оставить без изменений.

Вторая итерация. Подключаем базу данных.

Мы разобрались, как загрузить файл. Но пока непонятно как к нему обращаться. Что писать в параметре src тэга img ? Как отдавать файл для скачивания? На мой взгляд, для работы с файлами было бы удобно использовать функционал модели Yii. В самом деле, если каждому загруженному файлу будет соответствовать модель, все низкоуровневые операции, включая загрузку, можно будет поручить ей. А в свойстве $modMyModel->id_image хранить первичный ключ этой модели (теперь понятна суть имени этого свойства). Тогда для $modMyModel можно будет определить соответствующие связи и писать, например, так:

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

Создадим таблицу tbl_files с полями id, source, name . Определим модель DFile , связанную с этой таблицей. В ней определим статический метод upload :

И сразу создадим пустой класс DImage extends DFile . Он понадобится нам позже.
Теперь немного изменим нашу модель. Определим обещанную связь с картинкой и немного подправим метод beforeSave() :

В объекте $modMyModel модели можно обращаться к файлу через $modMyModel->image . Как это выгодно использовать — читайте дальше.

Третья итерация. Обращения к загруженным файлам.

До этого момента мы почти не разделяли файлы и картинки. В самом деле, их загрузка выполняется абсолютно идентично. Единственная разница — проверки перед загрузкой. Но с этим отлично справятся валидаторы DFileValidator и DImageValidator , в которых можно указать все необходимые правила.

В отличие от загрузки, обращения к загруженным файлам и картинкам осуществляются по-разному. Файлы грузятся чтобы их потом скачивать, а картинки — чтобы их смотреть. Начнем с файлов.

Работа с файлами

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

Генерацию ссылки удобно делать в DFile . Примерно так:

Ссылка указывает на контроллер FileController . Определим его:

Думаю, здесь все понятно. Метод actionDownload() не делает никаких дополнительных проверок, но их вполне можно включить при необходимости. В модели теперь, определив соответствующую связь, можно писать $modMyModel->file->downloadLink() . Конечно, такой подход будет менее производителен, чем выдача прямых ссылок на файлы. Если производительность является критичной, можно заказчивать файлы не в защищенную директорию data , а в другую (открытую) директорию, и выдавать прямые ссылки.

Работа с картинками

С картинками ситуация немного сложнее. Картинки требуют создания миниатюр. Кроме того, с картинками мы уж точно не можем позволить себе выдавать динамические ссылки. К счастью, Yii предоставляет удобный механизм публикации ресурсов, который можно использовать в наших целях. Идея такова: миниатюры будем создавать и публиковать как ресурсы при генерации ссылки на картинку. Тут, правда, есть пара неприятностей. Во-первых, если нужен доступ к исходной картинке, ее тоже придется копировать в папку assets . Во-вторых, публикацию не получится осуществить стандартными средствами Yii. Дело в том, что для каждого опубликованного файла Yii создаст собственную папку, что будет перебором. Да и создание миниатюр сразу в папку assets стандартными средствами сделать не получится.

Первая проблема может быть не актуальна, если картинок закачивается не очень много и доступ к исходной картинке не требуется. Исходные картинки хранятся в хорошем разрешении, их можно скачать используя описанный выше механизм, а для вывода на экран используются только миниатюры. Если же такая проблема имеет место, то, как вариант, можно не копировать исходную картинку в папку assets , а создать ссылку (стандартный механизм публикации в Yii предлагает публикацию с созданием ссылок).

Что касается второй проблемы, придется писать публикацию самостоятельно. Впрочем, не так уж много писать…

Итак, поехали. Класс DImage , унаследованный от DFile у нас уже есть. Опишем создание миниатюр и публикацию:

Для публикации миниатюр предлагаю создать в папке assets подпапку files . Учитывая то, что папку assets рекомендуется периодически чистить, существование папки assets/files необходимо каждый раз проверять. И создавать если нужно. Имя миниатюры равно имени изображения, дополненному идентификатором миниатюры. Изображение считается опубликованным, если все миниатюры находятся на своих местах. Проверять совпадение даты исходного и опубликованного файлов не имеет смысла, поскольку загруженный файл не может изменяться. Функция publish() возвращает URL опубликованной картинки (правда, без указания миниатюры), что не противоречит идее публикации ресурсов в Yii.

И, наконец, рассмотрим обращения к загруженной картинке. Дополним класс DImage методом image() :

Теперь, по аналогии с файлами, в модели можно писать $modMyModel->image->image() . Кстати, если размер миниатюр вдруг необходимо изменить или добавить новый (у меня такое как-то раз случилось), а все файлы уже закачаны, достаточно будет поменять размер в настройках и очистить папку assets.

Последние штрихи

Все работает. Картинки загружаются, выводятся. Файлы закачиваются и скачиваются. Осталось немного причесать код. Например, метод beforeSave() можно вынести из класса MyModel в класс DActiveRecord, от которого, как Вы успели заметить, наследуются все модели. Кроме этого, отображение инпутов для файлов и картинок можно перенести в класс DActiveForm extends CActiveForm . Хранение настроек можно поручить модулю files .

Ну и, по хорошей традиции, ссылка на скачивание работающего проекта. Выкладывать отдельные файлы оказалось проблематично из-за большого количества зависимостей, поэтому выкладываю проект целиком. Дамп БД лежит в protected/data/dump.sql. Из настроек — указать путь к Yii, прописать доступ к БД. Базовые классы и валидаторы лежат в папке protected/components, все что касается файлов — в модуле files.

Заключение

Итак, вот что мы имеем на выходе:

  1. Централизованное управление загрузкой и хранением файлов
  2. Удобный интерфейс для создания в моделях свойств-файлов
  3. Высокоуровневую генерацию ссылок на скачивание файлов и тэгов IMG

Идею можно развить. Например, практически все WYCIWYG — редакторы предлагают интерфейс для загрузки файлов и изображений. Для этого требуется лишь указать адрес загрузки. Обработчик загрузки можно включить в контроллер FileController . Но как тогда публиковать миниатюры?

Или еще, можно использовать предложения, описанные в статьях Безопасная загрузка изображений на сервер. Часть первая и Безопасная загрузка изображений на сервер. Часть вторая. Можно дополнить упомянутое выше расширение upload. Можно перенести функционал в поведения.

Одним словом, считать предложенное решение готовым пока рано. Но если описанная идея окажется полезной, готов довести работу до конца и опубликовать соответствующее расширение. Спасибо всем, кто дочитал!

yii2 источник CKEditor Image URL отсутствует

Я создал каталоги бэкэнд/Интернет/загрузки/изображения и дал им права 777

Я настроил бэкенд/конфигурация/главным .php как этот

И когда я загружаю изображение и нажимаю «Отправить его на сервер», он не загружается, и когда я нажимаю «ОК», он говорит, что URL-адрес источника изображения отсутствует.

Возможно, кто-то столкнулся с этой проблемой раньше? Кстати, если я удалить эти строки

Ничего не изменилось. Та же ошибка.

Создан 29 ноя. 17 2020-11-29 07:19:55 Jane08

1 ответ

это может быть немного устаревшим, но кто знает, что кто-то может наткнуться на эту же проблему, хотя мой немного отличается в рамках. Я использую codeigniter и пытаюсь интегрировать его с ckeditor upload image plugin, но вы должны получить идею, потому что возвращаемое значение одинаково для ckeditor.

here это решение я нашел, обратитесь к ссылке и смотри пример 3 раздела

который выглядит следующим образом:

следует отметить, что filebrowserUploadUrl опции следует указать на вашу функцию Yii, которая обрабатывать загруженное изображение, которое в этом случае выглядит как пример кода выше. и не забудьте добавить uploadimage и filebrowser на номера extraPlugins .

надеюсь, что это поможет.

Создан 18 янв. 18 2020-01-18 08:24:41 Guntur Santoso

Топ-пост этого месяца:  Урок 11. Основы ORM библиотеки Doctrine. События
Добавить комментарий