양식 제출시 컨트롤러에 모델이있는 경우 뷰는 설정된 플래시 메시지와 함께 적용되고 해당하는 경우 사용자 지정 메시지 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; ?>
오브젝트가 아닌 속성을 얻으려고합니다 : 어떤 행이 오류를 표시합니까? 수표를 넘었습니까? 왜냐하면 여기부터는 괜찮을 것 같습니다. –
컨트롤러에서보기로 모델을 보내는 방법이 문제입니다. '$ this-> refresh' 다음에 null이됩니다. [참조] (http://stackoverflow.com/questions/37959760/yii2-in-a-form-submission-model-is-null-after-redirect/37966072#comment63408655_37966072) @nana – Decimoseptimo