Home  >  Article  >  Backend Development  >  yii 1.1.16 含图片的文章无法修改

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

WBOY
WBOYOriginal
2016-06-06 20:28:351221browse

我有个含图片的文章,但是修改的时候就发现,获取不到图片
这是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>

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

这是我创建成功的图片
yii 1.1.16 含图片的文章无法修改
我要编辑
yii 1.1.16 含图片的文章无法修改
我把标题修改了一下
yii 1.1.16 含图片的文章无法修改
然后保存结果,问题就出现了
yii 1.1.16 含图片的文章无法修改

到底哪里出问题里,我刚接触yii,我的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>

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

这是我创建成功的图片
yii 1.1.16 含图片的文章无法修改
我要编辑
yii 1.1.16 含图片的文章无法修改
我把标题修改了一下
yii 1.1.16 含图片的文章无法修改
然后保存结果,问题就出现了
yii 1.1.16 含图片的文章无法修改

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

没用过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>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:如何携带其它域名的COOKIE?Next article:json or serialize