Yii2图像名称未保存在数据库中但保存在文件夹中

时间:2016-05-18 06:01:20

标签: yii2

我想上传图片。但图像名称未保存在数据库中,但图像移动到特定文件夹。

但没有显示错误

在我的控制器代码中:

            if($model->load(Yii::$app->request->post()) && $model->save()) {
            $image = UploadedFile::getInstance($model,'varImage');

            $imagepath='uploads/';

            $no=rand(0,1000);

            if($image != '')
            {
            // $img_loc = "portfolio_{$rand_name}-{$image}"; 
            $img_loc='portfolio_'.$no.$image;
            $model->varImage = $img_loc;
            }
            if($image != '')
            {           
            $image->saveAs($imagepath.$model->varImage);
            } 
            Yii::$app->getSession()->setFlash('succ', 'Portfolio added successfully');          
            return $this->redirect('view_portfolio');
            }

在我的模特中:

            public function rules()
            {
            return [

            ['varTitle', 'required'],
            [['varImage'], 'image', 'skipOnEmpty' => true],
            ['intOrder', 'required'],
            ['intOrder', 'unique'],
            ['intOrder', 'number'],
            ['intHomepage', 'safe'],


            ];
            }

在我的观点中:

            <?php 
            $form = ActiveForm::begin([
            //'type' => ActiveForm::TYPE_HORIZONTAL,
            'options' => ['enctype'=>'multipart/form-data']
            ]);

             echo $form->field($model, 'varImage')->fileInput();

             ActiveForm::end();

             ?>

我的代码出了什么问题。 请帮我解决这个问题。 感谢。

3 个答案:

答案 0 :(得分:1)

UploadedFile::getInstance返回Miladr Package个对象,而不是文件名。

$image = UploadedFile::getInstance($model,'varImage');
// after this
// $image->baseName  <--- will have original file base name
// $image->extension <--- will have file extension
// $image->name      <--- will have original full file name

你正在做错的部分在这里:

$img_loc='portfolio_'.$no.$image;

// do this
$img_loc='portfolio_'.$no.$image->name;

并且您在设置上述值之前保存模型

if($model->load(Yii::$app->request->post()) && $model->save()) { // HERE

您需要在处理完图像后调用$model->save()并设置图像名称。

答案 1 :(得分:1)

在分配图像属性之前保存模型。

这样做:

if ($model->load(Yii::$app->request->post()) && $model->validate()) {
   // your logic here
   $model->varImage = $img_loc;
   $image->saveAs($imagepath.$model->varImage);
   if ($model->save(false)) {
      // on success
   }
}

答案 2 :(得分:0)

  

更改您的上传代码,如下所示:

 if($model->load(Yii::$app->request->post())) {
                $image = UploadedFile::getInstance($model,'varImage');

                $imagepath='uploads/';

                $no=rand(0,1000);

                if($image != '')
                {
                $img_loc = "portfolio{$no}-{$image}"; 

                $model->varImage = $img_loc;
                }
                 if($model->save()){
                if($image)
                {           
                $image->saveAs($imagepath.$model->varImage);
                } 
            }
                Yii::$app->getSession()->setFlash('succ', 'Portfolio added successfully');          
                return $this->redirect('view_portfolio');
                }

在更改图片名称后使用$ model-&gt; save()。