2016-01-21 15 views
0

嘿傢伙我試圖設置一個下載按鈕,用戶可以下載一個文件,使用kartik的File Input Widget(單上傳)上傳文件。Yii2 sendFile() - 試圖獲取非對象的屬性

這些代碼駐留在CRUD生成的視圖/控制器/模型中。

這是視圖按鈕的代碼,

 <?= Html::a('Download Uploaded File', ['download', 'id' => $model->form_id], [ 
    'class' => 'btn btn-danger', 
    'data' => [ 
     'confirm' => 'Are you sure you want to download this item?', 
     'method' => 'post', 
    ], 
]) ?> 

控制器功能(下載),

public function actionDownload($id) { 
    $model = $this->findModel($id); 

    $path = Yii::getAlias('@web') . '/uploads'; 
    $file = '/borang/'.$model->form_id.'.'.$model->file->extension; 

    if (file_exists($file)) { 

    Yii::$app->response->sendFile($file); 

    } 
} 

控制器功能(上載其爲創建動作內側)

public function actionCreate() 
    { 

     $model = new FormMovement(); 

     if ($model->load(Yii::$app->request->post())) { 

      $model->file = UploadedFile::getInstance($model, 'file'); 

      if (!empty($model->file) && $model->validate()) { 
        $model->fm_upload = 'uploads/borang/'.$model->form_id.'.'.$model->file->extension; 
        $model->save(); 
        $model->file->saveAs('uploads/borang/'.$model->form_id.'.'.$model->file->extension); 
        return $this->redirect(['view', 'id' => $model->form_id]); 
      }else{ 
       $model->save(); 
       return $this->redirect(['view', 'id' => $model->form_id]); 
      } 

     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 

這是錯誤日誌, '嘗試獲取非對象的屬性'在C:\ xampp \ htdo CS \ adminsys \前端\控制器\ FormMovementController.php:181

指向,

$file = '/borang/'.$model->form_id.'.'.$model->file->extension; 

下載動作中(控制器)

+0

這部分'$ model-> file-> extension'在下載操作中找不到。 –

回答

1

試試這個方法:

public function actionDownload($id) { 
    $model = $this->findModel($id); 

    $path = Yii::getAlias('@web') . '/uploads'; 
    $ext = substr(strrchr($model->file,'.'),1); 
    $file = $path.$model->file; 
    $download = '/borang/'.$model->form_id.'.'.$ext; 
    if(file_exists($file)) 
     Yii::$app->response->sendFile($download); 
} 

strrchr()

+0

我試了一下代碼,沒有返回錯誤,但是我得到了一個沒有內容的白頁。我把重定向命令放到'view'頁面,現在只是刷新頁面。意思是下載鏈接無效,我想。 – Luqman

+0

@盧克曼。看到更新的答案。 –

+0

它的作品!謝謝! – Luqman

1

問題是在你的下載功能。你是n在你的模型中保存擴展名。有很多方法可以獲得文件的擴展名。

public function actionDownload($id) { 
    $model = $this->findModel($id); 

    $path = Yii::getAlias('@webroot') . '/uploads'; 
    $fileextension=end(explode('.',$model->fm_upload)); 
    $file = $path.'/borang/'.$model->form_id.'.'.$fileextension; 

    if (file_exists($file)) { 

    Yii::$app->response->sendFile($file); 

    } 
} 
+0

就像我對Insane Skull的方法所做的那樣,嘗試了你的代碼和相同的結果。沒有錯誤返回,但我得到了一個沒有內容的白頁。我把重定向命令放到'view'頁面,現在只是刷新頁面。意思是下載鏈接無效,我想。 – Luqman

+0

我已將uplaod文件夾路徑更改爲「$ path = Yii :: getAlias('@ webroot')。'/ uploads';」 。檢查我更新的答案。 –

+0

它的工作原理!我不能選擇兩者作爲接受的答案,但我選擇了我最瞭解的答案。謝謝! – Luqman

相關問題