2017-05-03 124 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

好了,我已经找到了解决办法:$模型 - >另存(假) - 无需任何验证。将尝试梳理未来的验证规则。