加入收藏 | 设为首页 | 会员中心 | 我要投稿 岳阳站长网 (https://www.0730zz.com/)- 物联平台、混合云存储、数据仓库、智能推荐、智能数字人!
当前位置: 首页 > 编程开发 > PHP > 正文

php – yii2 – Kartik文件输入 – 更新

发布时间:2020-08-16 06:29:08 所属栏目:PHP 来源:互联网
导读:情况就是这样:我是Yii2的新手,想在ActiveForm中使用一些文件上传器小部件..到目前为止,我发现这个非常好的一个: kartikwidgetFileInput 使用此小部件,我可以管理文件上传,然后,当进入编辑模式时,使用oportunite显示上一个上传的图像以替换它. 问题是,如果我

情况就是这样:我是Yii2的新手,想在ActiveForm中使用一些文件上传器小部件..到目前为止,我发现这个非常好的一个: kartikwidgetFileInput

使用此小部件,我可以管理文件上传,然后,当进入编辑模式时,使用oportunite显示上一个上传的图像以替换它.

问题是,如果我在没有修改图像的情况下按下表单的“更新”按钮,则表示图像“不能为空”,因为我在模型中设置了“必需”规则.

经历了一个糟糕的下午和更富有成效的夜晚之后,我遇到了一个对我有用的解决方案.

主要问题是文件输入在更新时不发送其值(存储在数据库中的文件的名称).它仅在浏览并通过文件输入选择时发送图像信息.

所以,我的解决方法是创建另一个用于管理文件上传的“虚拟”字段,名为“upload_image”.为此,我简单地将一个带有此名称的公共属性添加到我的模型类中:public $upload_image;

我还在Model类的规则方法中添加了以下验证:

public function rules()
{
    return [
        [['upload_image'],'file','extensions' => 'png,jpg','skipOnEmpty' => true],[['image'],'required'],];
}

在这里,’upload_image’是我的虚拟列.我使用’skipOnEmpty’= true添加’文件’验证,’image’是我数据库中的字段,在我的情况下必须是必需的.

然后,在我看来,我配置了’upload_image’小部件,如下所示:

echo FileInput::widget([
        'model' => $model,'attribute' => 'upload_image','pluginOptions' => [
            'initialPreview'=>[
                Html::img("/uploads/" . $model->image)
            ],'overwriteInitial'=>true
        ]
    ]);

在’initialPreview’选项中,我将我的图像名称设置为存储在从数据库返回的’$model-> image’属性中.

最后,我的控制器如下:

public function actionUpdate($id)
{
    $model = $this->findModel($id);
    $model->load(Yii::$app->request->post());

    if(Yii::$app->request->isPost){
        //Try to get file info
        $upload_image = yiiwebUploadedFile::getInstance($model,'upload_image');

        //If received,then I get the file name and asign it to $model->image in order to store it in db
        if(!empty($upload_image)){
            $image_name = $upload_image->name;
            $model->image = $image_name;
        }

        //I proceed to validate model. Notice that will validate that 'image' is required and also 'image_upload' as file,but this last is optional
        if ($model->validate() && $model->save()) {

            //If all went OK,then I proceed to save the image in filesystem
            if(!empty($upload_image)){
                $upload_image->saveAs('uploads/' . $image_name);
            }

            return $this->redirect(['view','id' => $model->id]);
        }
    }
    return $this->render('update',[
        'model' => $model,]);
}

(编辑:岳阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读