2016-06-22 19 views
1

フォーム提出時に、モデルがコントローラ内に見つかった場合、ビューは設定されたフラッシュメッセージでレンダリングされますが、適切な場合はhello <?= $model->username; ?>などのカスタマイズされたメッセージでレンダリングされます。フォーム提出モデルのYii2がリダイレクト後にヌルです

フォームの再送信を防止するためにreturn $this->refresh();を追加するのが楽しいと判断するまで、すべてうまくいきました。最終的にモデルとしてビュー内にTrying to get property of non-objectがスローされているのは、nullです。

私が見てきたように、redirectメソッドはレンダリングメソッドが実行されないようにします。したがって、モデル変数はビューに送られません。

POST HTTPメソッドを使用しています。必要に応じてGETに変更できると思います。これをどのように修正するか考えてみませんか?

CONTROLLER

public function actionIndividualSearch() { 
 
     
 
     $model = new Order(); 
 
     $model->scenario = Order::SCENARIO_SEARCH; 
 

 
     if ($model->load($post = Yii::$app->request->post()) && $model->validate()){ 
 
     //if ($model->load($post = Yii::$app->request->get()) && $model->validate()){ 
 

 
      $model = Order::find()->where(['number' => $post['Order']['number']])->one(); 
 
      
 
      $flash = $model ? ($model->status == Order::STATUS_COMPLETED ? 'orderCompleted' : 'orderNotCompleted') : 'orderNotFound'; 
 
      Yii::$app->session->setFlash($flash); 
 

 
      return $this->refresh(); 
 
      //return $this->redirect(['', 'model'=>$post['Order']['number']]); 
 
     } 
 

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

VIEW

<?php 
 

 
use yii\widgets\DetailView; 
 
use yii\helpers\Html; 
 

 
?> 
 

 
<div class="page-header"> 
 
    <h1>Consulta tu Orden</h1> 
 
</div> 
 

 
<p>Por favor introdusca el número de orden impreso en su ticket.</p> 
 

 
<?php echo $this->render('_search', ['model' => $model]); ?> 
 

 
    <?php if(Yii::$app->session->hasFlash('orderCompleted')): ?> 
 
    Hi <?= Html::encode($model->customer->first_name); ?> ... 
 

 
    <?php elseif(Yii::$app->session->hasFlash('orderNotCompleted')): ?> 
 
     Hi <?= Html::encode($model->customer->first_name); ?> ... 
 
    
 
<?php elseif(Yii::$app->session->hasFlash('orderNotFound')): ?> 
 
     Dear Customer... 
 
    <?php endif; ?>

+0

非オブジェクトのプロパティを取得しようとしています:どのラインがエラーを表示していますか?あなたは小切手を渡しましたか?なぜなら、ここからは全く問題ないと思われるからです。 –

+0

コントローラからビューにモデルを送信する方法が問題です。 '$ this-> refresh'の後にはnullになります。 [参照してください(http://stackoverflow.com/questions/37959760/yii2-in-a-form-submission-model-is-null-after-redirect/37966072#comment63408655_37966072)@nana – Decimoseptimo

答えて

0

リフレッシュした後、あなたの注文のモデルは空で、$model->customerはnullです。

また、$model->customer->first_nameを表示しようとしています。

+0

ええ、私はそれを暗示したと思います質問。真の疑問はモデルを再び利用可能にすることです。私が考えることのできる1つの方法は、コントローラ変数として作成し、 '$ this-> context-> model'のようなビューへのアクセスです。他の方法は、モデルが常にIDクエリパラメータとして暗示されるようにフォームをGETに変更することですが、この場合はすべてのページの再読み込み/リフレッシュ時にフォームが再提出されます。生成される... @urmaul – Decimoseptimo

+0

通常、別の「オーダーの表示」ページがあり、それをリフレッシュする代わりにリダイレクトします。 – urmaul

0

答えは、セッション変数、具体的にはフラッシュタイプを使用して嘘をついた。これにより、リクエスト間の変数を保持することができました。すべての関係者に感謝します。

関連する問題