Загрузка файла Yii с помощью Ajax call? - PullRequest
0 голосов
/ 17 января 2012

Здравствуйте, я делаю загрузку файлов с помощью Yii.Я реализовал этот способ, и он работает очень хорошо:

Вид:

echo CHtml::form($this->createUrl('uploadreport'), 'post', array('enctype'=>'multipart/form-data'));
<div id="div_upload" class="row" style="display:none">
    <?php
    $this->widget('CMultiFileUpload',array(
        'name'        => 'files',
        'accept'      => 'doc|docx',
        'max'         => 1,
        'htmlOptions' => array('size' => 25),
    ));

    echo CHtml::submitButton('Upload');
    ?>
</div>

Контроллер:

if (isset($_FILES['files'])) {
    $tmp_name = $_FILES['files']['tmp_name'][0];
    $filename = $_FILES['files']['name'][0];
    $new_url = '/home/ivan/reports/'.$filename;

    // Upload file
    move_uploaded_file($tmp_name, $new_url);

    $calc_id = $_POST['calc_id'];

    // Check if there is a previous report
    $report = Report::model()->findByAttributes(array('calc_id'=>$calc_id));
    if (isset($report)) {
        // If there is a previous report, delete it
        $qtxt = "DELETE FROM `tbl_reports` WHERE `calc_id` LIKE '$calc_id';";
        $exec = Yii::app()->db->createCommand($qtxt)->execute();
    }

    // Insert the new report
    $rep_add = new Report;
    $rep_add->calc_id = $calc_id;
    $rep_add->report_url = $new_url;
    $rep_add->save();
}

Как вы можете видеть на мой взгляд, я использую CHtml::submitButton.Но я хотел бы использовать это вместо:

echo CHtml::button(
    'Upload Report', array(
        'ajax'    => array(
            'type' => 'POST',
            'url'  => CController::createUrl('Calculator/uploadReport'),
        )
    )
);

Но если я использую вышеупомянутое, то в моем контроллере $_FILES['files'] становится пустым или, если я пытаюсь CUploadedFile::getInstance();, он возвращает пустую строку.

Я хочу использовать ajax, потому что я не хочу отображать никакие другие представления. Я хочу, чтобы пользователь оставался в текущем представлении после того, как он / она загрузит файл.Как я могу использовать Ajax или как остановить обновление текущего представления, когда я использую CHtml::submitButton('Upload');

Любые советы / помощь приветствуются.

Ответы [ 4 ]

1 голос
/ 28 января 2012

Я использовал расширение EAjaxUpload . Я думаю, что в Yii невозможно обработать загрузку файлов через Ajax.

0 голосов
/ 18 января 2013

почему вы не использовали это: http://www.yiiframework.com/extension/coco/ это очень мощно, надеюсь, это поможет вам

0 голосов
/ 24 января 2012

Я не могу вызвать действие своего контроллера через действие ajax.Итак, я думаю, что это невозможно в Yii.В итоге я использовал это расширение: http://www.yiiframework.com/extension/eajaxupload/,, которое выполняет загрузку файлов с помощью Ajax.

0 голосов
/ 17 января 2012

Используйте взамен CHtml :: ajaxSubmitButton ().Это правильный способ выполнения представления AJAX.Проверьте документацию здесь: http://www.yiiframework.com/doc/api/1.1/CHtml/#ajaxSubmitButton-detail вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...