2017-05-03 184 views
1

所以我試圖通過Yii2表單獲取信息並將其保存到數據庫中,儘管它不起作用。我收到了成功的Flash消息,但沒有對數據庫進行任何更改。將表單數據保存到數據庫表中YII2

Controller文件:

<?php 

namespace frontend\modules\portfolio\controllers; 

use Yii; 
use yii\web\Controller; 
use frontend\modules\portfolio\models\LandingPage; 
use common\models\HelloMessage; 

class HelloController extends Controller { 

    public function actionIndex() { 

     $form_model = new HelloMessage(); 
     $request = Yii::$app->request; 

     if ($form_model->load(Yii::$app->request->post())) { 
      $form_model->name = $request->post('name'); 
      $form_model->email = $request->post('email'); 
      $form_model->message = $request->post('message'); 

      $form_model->save(); 
      Yii::$app->getSession()->setFlash('success', 'Your message has been successfully recorded.'); 
     } 

     return $this->render('index', [ 
      'form_model' => $form_model 
     ]); 
    } 

} 

,這將是視圖文件:

 <div class="box"> 
      <?= Yii::$app->session->getFlash('success'); ?> 

      <?php $form = ActiveForm::begin(); ?> 

      <?= $form->field($form_model, 'name')->textInput(['maxlength' => true]) ?> 

      <?= $form->field($form_model, 'email')->textInput(['maxlength' => true]) ?> 

      <?= $form->field($form_model, 'message')->textarea(['maxlength' => true]) ?> 

      <div class="form-group"> 
       <?= Html::submitButton('Submit', ['name' => 'contact-button']); ?> 
      </div> 

      <?php ActiveForm::end(); ?> 
     </div> 
+0

爲什麼你不檢查'save()'是否返回'true'? – Bizley

回答

1

最有可能的模型驗證失敗。如果使用$form_model->save(false)關閉,您可以關閉它,但最好知道它爲什麼不驗證。這樣做:

if (!$form_model->validate()) { 
    return $this->render('index', [ 
      'form_model' => $form_model 
     ]); 
} 
+0

它仍然無法正常工作。 –

+0

是的,但你沒有看到錯誤? – gmc

+0

沒有任何錯誤。我已經var轉儲視圖文件中的表單字段 - 表單提交後,$ form_model->名稱中沒有數據。 –

2

改變你的索引行動像

$form_model = new HelloMessage(); 
    $postData = Yii::$app->request->post(); 

    if ($form_model->load($postData)) { 
     if (!$form_model->save()) 
      print_r($form_model->getErrors()); // this would be helpful to find problem. 
     else 
      Yii::$app->getSession()->setFlash('success', 'Your message has been successfully recorded.'); 
    } 

    return $this->render('index', [ 
     'form_model' => $form_model 
    ]); 
} 
0

好了,我已經找到了解決辦法:$模型 - >另存(假) - 無需任何驗證。將嘗試梳理未來的驗證規則。