我想更新记录而不会丢失我上传的文件。以下是我的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,
));
}
答案 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
验证器。