2017-10-04 198 views
0

我想處理表單並從表單保存數據做我的分貝。 我想在保存之前從表單和另一個數據獲取一些數據(如當前user_id,當前日期時間)。我創建方法控制器:爲什麼數據不能保存?

public function actionCreate() 
    { 
     $model = new Post(); 
     if ($model->load(\Yii::$app->request->post()) && $model->validate()) { 
      $model->user_id = \Yii::$app->user->getId(); 
      $model->created_at = \Yii::$app->formatter->asDate(new \DateTime(),'php:Y-m-d'); 
      $model->image = UploadedFile::getInstance($model, 'image'); 
      if($model->upload()) { 
       $model->image = ('web/images/' . $model->image->baseName . '.' . $model->image->extension); 
      } else { 
       $model->image = 0; 
      } 
      $model->save(); 
      return $this->redirect(['site/blog']); 
     } else { 
      return $this->render('blog/create', ['model' => $model]); 
     } 
    } 

和我的Post模型:

class Post extends ActiveRecord 
{ 
    public $title; 
    public $text; 
    public $image; 
    public $comments; 

    public function rules() 
    { 
     return [ 
      [['title', 'text'], 'required'], 
      [['image'], 'file', 'extensions' => 'png, jpg'], 
     ]; 
    } 
    public function upload() 
    { 
     if ($this->image->saveAs(\Yii::getAlias('@app') .'\web\images\\' . $this->image->baseName . '.' . $this->image->extension)) 
      return true; 
     else { 
      return false; 
     } 
    } 
    public function getUser() 
    { 
     return $this->hasOne(User::className(),['id' => 'user_id']); 
    } 
} 

但現在當我把我的表格只有USER_ID,created_at,保存在我的分貝。我做錯了什麼?

+0

這可能是因爲'$ model-> image = 0',這可能是上傳造成'false'響應的原因.. –

+0

如果'$ model-> save();'失敗,則應該將視圖渲染爲看你的表單中的錯誤('return $ this-> render('blog/create',['model'=> $ model]);') – gmc

+0

你應該啓用錯誤報告和/或檢查你的日誌文件追查問題。也許是路徑中的雙斜線導致文件上傳失敗,即「\ web \ images \\」?你也可以考慮使用正斜槓。您還應該確保Web服務器可以寫入'web \ images'文件夾。 – Cyclonecode

回答

2

刪除此:

public $title; 
public $text; 
public $image; 
public $comments; 

從你的模型。就這樣。 ActiveRecord會自動映射表中的列。

+0

這是有效的!謝謝! – Rosti

+0

祝您有個愉快的一天! ;) – Yupik

相關問題