Home > Article > Backend Development > yii 1.1.16 含图片的文章无法修改
我有个含图片的文章,但是修改的时候就发现,获取不到图片
这是Example.php是model文件
<code>/** * 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'), ); }</code>
这是ExampleController.php文件
<code> 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, )); } } }</code>
这是view文_form.php
<code><?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 style="max-width:90%" src="<?php%20echo%20%24model->img;%20?>" alt="yii 1.1.16 含图片的文章无法修改" ><?php } ?> <?php echo $form->error($model,'img'); ?> </div></code>
问题就是我创建成功的这个文件,要编辑除了图片的别的内容时,图片就丢失,他不保存图片
这是我创建成功的图片
我要编辑
我把标题修改了一下
然后保存结果,问题就出现了
我有个含图片的文章,但是修改的时候就发现,获取不到图片
这是Example.php是model文件
<code>/** * 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'), ); }</code>
这是ExampleController.php文件
<code> 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, )); } } }</code>
这是view文_form.php
<code><?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 style="max-width:90%" src="<?php%20echo%20%24model->img;%20?>" alt="yii 1.1.16 含图片的文章无法修改" ><?php } ?> <?php echo $form->error($model,'img'); ?> </div></code>
问题就是我创建成功的这个文件,要编辑除了图片的别的内容时,图片就丢失,他不保存图片
这是我创建成功的图片
我要编辑
我把标题修改了一下
然后保存结果,问题就出现了
没用过1,但是翻了下代码,你的问题在rules.
array('img', 'file', 'allowEmpty'=>true, 'types'=>'bmp,jpg,png,gif'),
CFileValidator
如果验证的字段不通过的话会把该字段设置成 null
<code>/** * 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); } }</code>