从Yii上传图片,显示endWiget()错误

时间:2014-09-03 08:19:08

标签: php yii

您好我在尝试使用this方法上传图片时遇到了问题。

我的行动/模特:

class Image extends CActiveRecord
{
    public $foto;
    ...

    public function rules()
    {
        return array(
            ...
            array('foto', 'file', 'types'=>'jpg, gif, png'),
            ...
        );
    }
}

我的控制器:

class ImageController extends Controller
{
    public function actionCreate()
    {
            $model=new Image;

            // Uncomment the following line if AJAX validation is needed
            // $this->performAjaxValidation($model);

            if(isset($_POST['Image']))
            {
                    $model->attributes=$_POST['Image'];
                    $model->image=CUploadedFile::getInstance($model,'foto');
                    if($model->save())
                            $model->foto->saveAs('productimages');
                            $this->redirect(array('view','id'=>$model->id));
            }

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

我的观点:

<?php $form = $this->beginWidget(
            'CActiveForm',
            array(
                'id' => 'upload-form',
                'enableAjaxValidation' => false,
                'htmlOptions' => array('enctype' => 'multipart/form-data'),
            )
    ); ?>

    <?php echo $form->labelEx($model, 'foto'); ?>
    <?php echo $form->fileField($model, 'foto'); ?>
    <?php echo $form->error($model, 'foto'); ?>

    ...

    <div class="row buttons">
            <?php echo CHtml::submitButton('Submit'); ?>
    </div>

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

但是当我跑步时,出现了两个问题:

问题#1: endWiget()调用[由Ivan Misic解决]

  

ImageController在其视图“/var/www/html/onlineshop-nimalogos/protected/views/image/_form.php”中包含不正确嵌套的窗口小部件标记。 CActiveForm小部件没有endWidget()调用。

问题#2: 由于问题#1已解决,出现了另一个问题,图像未保存在我的'productimages'文件夹中。

请帮我解决问题#2。非常感谢..

1 个答案:

答案 0 :(得分:2)

您在某处打开了多余的 CActiveForm小部件,您应该查看视图和部分内容。

Yii正在使用gii创建三个视图文件,这些文件是:

create.php      update.php
    |               |
    |               |
    +-------+-------+
            |
            |
          _form.php

创建和更新视图呈现相同的部分_form,因此您应该查看所有三个以查找冗余的 beginWidget 调用。

您在问题中支持的视图应该是_form.php局部视图。