2016-05-18 16 views
0

画像をアップロードしたい。しかし、イメージ名はデータベースに保存されていませんが、イメージは特定のフォルダに移動しました。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(); 

      ?> 

私のコードで。 この問題を解決するのを助けてください。おかげさまで

+0

イメージ属性を割り当てる前にモデルを保存します。 – SiZE

答えて

1

UploadedFile::getInstanceは、ファイル名ではなくUploadedFileオブジェクトを返します。

$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; 

し、また、あなたのモデルを保存しているあなたは、あなたの後$model->save()を呼び出す必要がある値

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

上に設定する前に、画像を処理して画像名を設定します。

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 
    } 
} 
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'); 
       } 

使用$モデル - >()変更のイメージ名の後に。

関連する問題