2017-05-03 9 views
1

Yii2フォームから情報を取得してデータベースに保存しようとしていますが、動作しません。成功のフラッシュメッセージが表示されますが、データベースに変更はありません。フォームデータをデータベーステーブルに保存するYII2

コントローラファイル:

<?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-> nameにはデータはありません。 –

2

変更あなたのインデックス[OK]をその

$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

様作用、私は解決策を見つけた:$モデル - >保存(偽) - 任意の検証なし。将来、検証ルールを整理しようとします。

関連する問題