2016-06-22 7 views
1

양식 제출시 컨트롤러에 모델이있는 경우 뷰는 설정된 플래시 메시지와 함께 적용되고 해당하는 경우 사용자 지정 메시지 hello <?= $model->username; ?>과 함께 렌더링됩니다.리디렉션 후 양식 제출 모델의 Yii2가 null입니다.

양식 재 제출을 막기 위해 return $this->refresh();을 추가하는 것이 재미있을 때까지 모든 것이 잘 작동했습니다. 궁극적으로 모델로보기에서 Trying to get property of non-object을 던졌습니다. null입니다.

리디렉션 메서드는 렌더링 메서드가 실행되는 것을 방지하므로 모델 변수가 뷰로 전송되지 않습니다.

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

그래, 내가 생각하기에 질문. 진정한 질문은 어떻게 모델을 다시 사용할 수있게 만드는 것입니까? 내가 생각할 수있는 한 가지 방법은 그것을 컨트롤러 변수로 생성 한 다음 '$ this-> context-> model'과 같은보기 액세스로 할 수 있다고 생각합니다. 다른 방법은 양식을 GET으로 변경하여 모델을 항상 ID 쿼리 매개 변수로 암시하지만이 경우 모든 페이지를 다시로드/새로 고침하면 양식이 다시 제출됩니다. 그렇다면 플래시 메시지는 항상 생성됩니다 ... @urmaul – Decimoseptimo

+0

일반적으로 별도의 "주문보기"페이지가 있으며 새로 고치는 대신 리디렉션됩니다. – urmaul

0

답변은 세션 변수 (플래시 유형)를 사용하여 거짓말을했습니다. 이를 통해 요청간에 변수를 보존 할 수있었습니다. 모든 관계자에게 감사드립니다.