Проблема загрузки файла Yii - PullRequest
1 голос
/ 24 марта 2012

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

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

Мой контроллер выглядит:

public function actionEntry() {
        if (!Yii::app()->user->isGuest) {
            $model = new TrackForm;

            if (isset($_POST['TrackForm'])) {
                $entry = new Track;
                try {
                  $entry->product_image = $_POST['TrackForm']['product_image'];
                    $entry->product_image = CUploadedFile::getInstance($model, 'product_image');

                    if ($entry->save()) {
                        if ($entry->product_image) {
                            $entry->product_image->saveAs($entry->product_image->name, '/trackshirt/uploads');
                        }
                        }

                        $this->render('success', array('model' => $model));

                        // redirect to success page
                    }
                } catch (Exception $e) {
                    echo 'Caught exception: ', $e->getMessage(), "\n";
                }
            } else {
                $this->render('entry', array('model' => $model));
            }
        }
    }

Модель похожа на:

<?php
class Track extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'product_details';
    }
}

Мой взгляд выглядит:

 <?php
            $form = $this->beginWidget('CActiveForm', array(
                        'id' => 'hide-form',
                        'enableClientValidation' => true,
                        'clientOptions' => array(
                            'validateOnSubmit' => true,
                        ),
                        'htmlOptions' => array('enctype' => 'multipart/form-data'),
                    ));
            ?>

    <p class="auto-style2"><strong>Administration - Add New Product</strong></p>
    <table align="center" style="width: 650px"><td class="auto-style3" style="width: 250px">Product Image</td>
            <td>

                <?php echo $form->fileField($model, 'product_image'); ?>
            </td>
        </tr>

    </table>

    <p class="auto-style1">

                <div style="margin-leftL:-100px;">
                <?php echo CHtml::submitButton('Submit New Product Form'); ?>
            </div>

     <?php $this->endWidget(); ?>

Любая идея, где находитсяпроблема? Я пытался отладить его, но каждый раз, когда он возвращает Null.

Спасибо.

Ответы [ 3 ]

1 голос
/ 24 марта 2012

Я удивлен, что вы не видите сообщение об ошибке от этого:

<?php echo $form->activeFileField($model, 'product_image'); ?>

, поскольку CActiveForm не имеет метода activeFileField (), который принадлежит CHtml

Я думаю, тебе нужно

<?php echo $form->fileField($model, 'product_image'); ?>

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

                         // redirect to success page
                 /*}*/
                 } catch (Exception $e) {

(вероятно, это продукт перехвата при загрузке кода)

1 голос
/ 03 августа 2012

эта ссылка может вам помочь. Также создайте дамп экземпляра CUploadedFile, чтобы проверить, что происходит.

0 голосов
/ 24 марта 2012

Помните, что CUploadedFile :: getInstance ($ model, $ attribute) возвращает объект типа CUploadedFile . Если вы просто хотите сделать $ entry-> product_image именем файла изображения, вы можете сделать что-то вроде:

$image = CUploadedFile::getInstance($model, 'product_image');
$entry->product_image = $image->name; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...