如何更新已上传文件的记录?

时间:2015-06-29 23:32:00

标签: file-upload yii action

我想更新记录而不会丢失我上传的文件。以下是我的create操作。

    public function actionCreate()
    {
        $model = new Page;
        if (isset($_POST['Page']))
        {
            $model->attributes = $_POST['Page'];
            $model->filename = CUploadedFile::getInstance($model, 'filename');
            if ($model->save())
            {
                if ($model->filename !== null)
                {
                    $dest = Yii::getPathOfAlias('application.uploads');
                    $model->filename->saveAs($dest . '/' . $model->filename->name);

                    $model->save();
                }
                $this->redirect(array('view', 'id' => $model->id));
            }
        }
        $this->render('create', array(
            'model' => $model,
        ));
    }

1 个答案:

答案 0 :(得分:0)

在yii中,update方法旨在更新您从表单中发布的值。它不会更新所有模型属性。

假设您的Page模型有4个模型属性,假设所有属性都是必需的。

  • 标题
  • 描述
  • 关键字
  • 图像

由于您不想更新图片字段,因此可以通过在网页模型规则中为图片字段设置scenario来将其设为非必填字段。

class Page extends CActiveRecord
{

   /*
   Coding
   */

   public function rules()
   {
        return array(
            array('title, description,keywords', 'required'),
            array('image', 'file', 'types'=>'jpg, png'),
            array('image', 'required', 'on' => 'insert'),

            // => You need image field to be entered on Create, not on Update
            .................

   }
}

因此,在“创建”,“在更新时隐藏”操作中显示表单中的文件输入,以便图像字段不会提交。

 //Your page form

 <?php if($model->isNewRecord):?>
    echo $form->labelEx($model, 'image');
    echo $form->fileField($model, 'image');
    echo $form->error($model, 'image');
 <?php endif;?>

由于您使用的是Yii-2,因此您可以使用skippOnEmpty验证器。