表单提交模型中的Yii2在重定向后为空

时间:2016-06-22 06:02:23

标签: php yii2 yii2-model

在表单提交后,如果在控制器中找到模型,则会使用设置的Flash消息呈现视图,但在适用时也会显示hello <?= $model->username; ?>等自定义消息。

一切正常,直到我决定添加return $this->refresh();以防止重新提交表单我感到很有趣。最终会在视图中抛出Trying to get property of non-object作为模型null

正如我所见,重定向方法阻止执行渲染方法,因此模型变量不会被发送到视图。

我使用POST http方法,我想我可以在必要时更改为GET。你知道如何重做这个吗?

CONTROLLER

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

查看

&#13;
&#13;
<?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; ?>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

刷新后,您的订单模型为空,$model->customer为空。

您正试图让$model->customer->first_name进入视野。

答案 1 :(得分:0)

答案在于使用会话变量,特别是flash类型。这允许我在请求之间保留变量。感谢所有参与者。