2015-07-03 3 views
1

я работаю над проектом Yii2 где я интегрированный http://ckeditor.com/demoCKEditor загрузка файлов не работает в Yii2

Теперь я хочу, чтобы реализовать функциональные возможности загрузки файлов/изображений в нем.

Вот как я интегрировал CKEditor в Yii2 Project.

Шаг1: AppAsset.php

public $js = [ 
    'ckeditor/ckeditor.js', 
]; 

Вызывающие ckeditor.js JavaScript файл из config/AppAsset класса

Шаг2: Просмотр

<?= $form->field($model, 'standard_output_information')->textarea(['rows' => 2, 'class'=>'ckeditor']) ?> 

Step3: config.js

CKEDITOR.editorConfig = function (config) { 
    var base_url = window.location.origin; 
    var pathArray = window.location.pathname.split('/'); 
    var projectUrl = base_url + "/" + pathArray[1] + "/" + pathArray[2] + "/" + pathArray[3] + "/uploads"; 

    config.filebrowserImageBrowseUrl = base_url + "/pcwf" + "/backend" + "/web" + "/businessprocessprofile" + "/upload"; 
    config.filebrowserImageUploadUrl = base_url + "/pcwf" + "/backend" + "/web" + "/businessprocessprofile" + "/upload";  
}; 

Здесь я настроил ImageBrowserUrl и ImageUploadUrl упомянутые здесь http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)

Step4: Контроллер

public function actionUpload() { 
    echo \yii\helpers\Html::csrfMetaTags(); 

    echo "<pre>"; 
    print_r($_FILES); 
    print_r($_REQUEST); 
    exit; 
} 

Здесь я ожидаю данных, загруженных изображений. Но всякий раз, когда я нажимаю на кнопку Send it to Server после выбора изображения, это дает мне следующую ошибку.

enter image description here

Не уверен, является ли его вопрос о неправильной конфигурации URL-адрес в config.js или это Yii2 вопрос формы представления.

Любая помощь будет оценена по достоинству.

ответ

3

Я считаю, что у вас есть проблема с токенами CRSF. Подробнее о безопасности здесь: http://www.yiiframework.com/doc-2.0/guide-security-best-practices.html. Самый простой способ обойти это - отключить CRSF для этого конкретного действия. Вы можете посмотреть, как это сделать здесь: https://stackoverflow.com/a/28526946/1880627

+1

Спасибо ... это сработало для меня. Я просто унаследовал метод beforeAction в своем контроллере и отключил токен csrf, и он работал как шарм ... :) – Sky

0

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

$(document).off('click', '.cke_dialog_tabs a[id^="cke_Upload_"]').on('click', '.cke_dialog_tabs a[id^="cke_Upload_"]', function() { 
    var $forms = $('.cke_dialog_ui_input_file iframe').contents().find('form'); 
    var csrfName = yii.getCsrfParam(); 
    $forms.each(function() { 
     if (!$(this).find('input[name=' + csrfName + ']').length) { 
      var csrfTokenInput = $('<input/>').attr({ 
       'type': 'hidden', 
       'name': csrfName 
      }).val(yii.getCsrfToken()); 
      $(this).append(csrfTokenInput); 
     } 
    }); 
}); 

Для более подробного обсуждения по этому вопросу см 2amigos/yii2-ckeditor-widget, issue #2. Здесь также извлекается фрагмент кода, с небольшими небольшими изменениями, чтобы охватить несколько виджетов на странице.

Смежные вопросы