通过Yii 2更新时ActiveForm中的文件输入问题

mzaanser  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(138)

我用的是Yii2框架,上传一张图片的时候文件上传功能很好用,但是当我点击发布的文章,我只想再更新一次帖子(假设我不想更新图片,我只想更新其他内容),但是当我点击查看的时候,我发现我上传的文件被一个空值(varchar类型)代替了,我上传的图片无法显示出来。
我确实尝试过自己修复,如下所示,但当我点击提交按钮时,现有文件值无法保存。

<?php

                    if (($post->file) != "") {
                    echo $form->field($post, 'file')->textInput()->hint('My currently uploaded file')->label('My Photo') ;

                }
                else{
                    echo $form->field($post, 'file')->fileInput()->hint('To upload a new file')->label('My Photo') ;
                }

                ?>

当我点击提交按钮,我现有的文件不见了。有什么好的方法来修复它。提前感谢您的意见。

6mzjoqzu

6mzjoqzu1#

在模型中使用另一个变量来上载文件。
例如,使用file_field名称从提交的文件中获取文件并存储在file字段中。
第一个
要上传新文件,请检查file_field

if ($post->file_field) {
    // $post->file  old file
    // Save $post->file_field and store name in $post->file
}
raogr8fs

raogr8fs2#

将规则添加到模型规则:

[['file'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg'],

并检查控制器中是否存在空上载:

if (Yii::$app->request->isPost) {
    $ok = true;
    // process your other fields...
    ...
    // process image file only if there is one
    $post->file= UploadedFile::getInstance($post, 'file');
    if ($post->file && $post->upload()) {

    }
    if ($ok) {
        return $this->redirect(...);
    }
}

有关文件上传的详细信息,请参阅Yii2 docsYii2 guide

相关问题