yii 1.1.16 含图片的文章无法修改


我有个含图片的文章,但是修改的时候就发现,获取不到图片
这是Example.php是model文件


 /**
 * This is the model class for table "example".
 *
 * The followings are the available columns in table 'example':
 * @property integer $id
 * @property string $img
 * @property string $title
 * @property string $url
 * @property integer $state
 * @property string $detail
 */
public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('img, title, state', 'required'),
            array('state', 'numerical', 'integerOnly'=>true),
            array('title, url', 'length', 'max'=>150),
            array('img', 'file', 'allowEmpty'=>true, 'types'=>'bmp,jpg,png,gif'),
            array('detail', 'safe'),
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            array('id, img, title, url, state, detail', 'safe', 'on'=>'search'),
        );
    }

这是ExampleController.php文件


 public function actionUpdate($id){    
            $model= Example::model()->findByPk($id);
            if($model==null){
                $this->redirect(array('index'));
            }else{
                $oldPic = $model->img;
                if(isset($_POST['Example'])){
                    $model->attributes=$_POST['Example'];

                    $model->img = $oldPic;

                    $fileupload = CUploadedFile::getInstance($model, 'img');
                    if($fileupload != null){
                        $filename = 'images/'.time().'.'.$fileupload->extensionName;
                        if($fileupload->saveAs($filename)){
                            $model->img = $filename;
                            if(file_exists($oldPic))unlink($oldPic);
                        }
                    }

                    if($model->save()){
                        $this->redirect(array('index'));
                    }else{
                        $this->render('update',array(
                        'model'=>$model,
                    ));
                    }
                }else{
                    $this->render('update',array(
                        'model'=>$model,
                    ));
                }
            }
    }

这是view文_form.php


 <?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'example-form',
    // Please note: When you enable ajax validation, make sure the corresponding
    // controller action is handling ajax validation correctly.
    // There is a call to performAjaxValidation() commented in generated controller code.
    // See class documentation of CActiveForm for details on this.
    'enableAjaxValidation'=>false,
    'htmlOptions' => array('enctype' => 'multipart/form-data')
)); ?>

<div class="row">
        <?php echo $form->labelEx($model,'img'); ?>
        <?php echo CHtml::activeFileField($model,'img',array('value'=>$model->img)); ?><span class="note">图片推荐大小为500x600</span>
        <?php if($model->isNewRecord){ echo ''; }else{ ?><br><img width=300 src="<?php echo $model->img; ?>"><?php } ?>
        <?php echo $form->error($model,'img'); ?>
    </div>

问题就是我创建成功的这个文件,要编辑除了图片的别的内容时,图片就丢失,他不保存图片

这是我创建成功的图片
创建成功
我要编辑
修改显示成功
我把标题修改了一下
标题修改了
然后保存结果,问题就出现了
保存后图片没有了

到底哪里出问题里,我刚接触yii,我的yii版本是1.1.16,请你们修正一下!!

修改 yii 图片上传 php

Thunder 9 years, 4 months ago

没用过1,但是翻了下代码,你的问题在rules.

array('img', 'file', 'allowEmpty'=>true, 'types'=>'bmp,jpg,png,gif'),

CFileValidator 如果验证的字段不通过的话会把该字段设置成 null


 /**
     * Raises an error to inform end user about blank attribute.
     * Sets the owner attribute to null to prevent setting arbitrary values.
     * @param CModel $object the object being validated
     * @param string $attribute the attribute being validated
     */
    protected function emptyAttribute($object, $attribute)
    {
        if($this->safe) 
            $object->$attribute=null;
        if(!$this->allowEmpty)
        {
            $message=$this->message!==null?$this->message : Yii::t('yii','{attribute} cannot be blank.');
            $this->addError($object,$attribute,$message);
        }
    }

葛炮光头仔 answered 9 years, 4 months ago

Your Answer