1

フォームの送信時に、コントローラーでモデルが見つかった場合、ビューは設定されたフラッシュ メッセージと共にレンダリングされますがhello <?= $model->username; ?>、該当する場合のようにカスタマイズされたメッセージもレンダリングされます。

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

ご覧のとおり、redirect メソッドによって render メソッドが実行されないため、モデル変数がビューに送信されません。

私は POST http メソッドを使用していますが、必要に応じて GET に変更できると思います。これを作り直す方法はありますか?

コントローラ

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,
        ]);
    }

見る

<?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; ?>

4

2 に答える 2

0

更新後、 Order モデルは空で$model->customernull です。

そして、あなたは$model->customer->first_name視野に入ろうとしています。

于 2016-06-22T11:00:49.710 に答える
0

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

于 2016-06-23T05:02:45.933 に答える