FileUpload上载图像无法保存图像,但未显示错误消息

时间:2019-07-18 06:37:33

标签: php image yii2 yii2-basic-app

我正在使用Yii2 basic。似乎没有什么错,没有显示错误消息,但是为什么我的图像没有上传?其余的(标题,内容等)通过表格上传,尽管

这是我模型的规则和相关方法:

public $image;

 public function init(){
   Yii::$app->params['uploadPath'] = Yii::$app->basePath . '/uploads/batam/';
   Yii::$app->params['uploadUrl'] = Yii::$app->urlManager->baseUrl . '/uploads/batam/';
    }

 public function rules()
    {
        return [
            [['title', 'content'], 'required'],
            [['content'], 'string'],
            [['created_at', 'updated_at','image'], 'safe'],
            [['image'], 'file','extensions'=>'jpg,png,jpeg'],
            [['title'], 'string', 'max' => 255],
        ];
    }

    public function getImageFile() 
    {
        return isset($this->image) ? Yii::$app->params['uploadPath'].$this->image : null;
    }

  public function uploadImage() {
     $image = UploadedFile::getInstance($this, 'image');
     if (empty($image)) {
            return false;
     }
     $this->image = $image->name;
        return $image;
     }

这是我的控制人

    public function actionCreate()
    {
        $model = new News();
        if ($model->load(Yii::$app->request->post()) )
         {
           // process uploaded image file instance                    
            $image = $model->uploadImage();
                if($model->validate())
                {
                    if($model->save())
                        { 
                        // upload only if valid uploaded file instance found
                        if ($image !== false) 
                            {
                                $path = $model->getImageFile();
                                $image->saveAs($path);
                            }
                             return $this->redirect(['view', 'id'=>$model->id]);
                        }
                }
                        else{echo " validation is failed";}
         } 
        else{   
                     return $this->render('create', [
                    'model' => $model,
                         ]);
            }
    }

这是表格

echo $form->field($model, 'image')->widget(FileInput::classname(), [
    'options' => ['accept' => 'image/*'],
    'pluginOptions' => [['previewFileType' => 'any']]
]);

我也在表格的开头也包含了enctype <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]);

此时,在控制器的if ($image !== false)部分中,要保存的$image$path包含一个看似正确的路径。

这是我的$ path:C:\xampp\htdocs\gbia/uploads/batam/test image 1-01.jpg,我的$ image也包含对象(不为null)。这是我的$ image的var_dump:

object(yii\web\UploadedFile)#179 (5) { ["name"]=> string(19) "test image 1-01.jpg" ["tempName"]=> string(24) "C:\xampp\tmp\php3199.tmp" ["type"]=> string(10) "image/jpeg" ["size"]=> int(925184) ["error"]=> int(0) }

我认为saveAs()有问题,但是我无法弄清楚。在Google上四处搜寻,查看stackoverflow和教程,但我仍然找不到任何答案。有人可以帮忙吗?谢谢

1 个答案:

答案 0 :(得分:2)

检查模型,已将$ image声明为该类的公共变量,而不是数据库中的字段,如果要在其中存储数据,它将永远无法使用,因为它是临时的公共属性将优先于数据库列。

public $image;

因此,请删除此字段(如果它也位于数据库中)或生成新的列名(建议通过路径名)。

[['content', 'path'], 'string'],

然后您需要存储路径,我看不到您在控制器或类中的位置。我建议您在数据库中添加一个带有“路径”名称的字段,然后在控制器中执行以下操作:

$path = $model->getImageFile();
$image->saveAs($path);
$model->path = $path . $image // You must store the full path plus the file name
$model->save(); // then you save the model again

任何疑问都欢迎,我有示例项目,如果您看不到灯光,我可以向您展示。