提交表单后,如果在控制器中找到模型,则会使用设置的 flash 消息呈现视图,但也会使用自定义消息(如hello <?= $model->username; ?>
适用时)呈现。
一切都很好,直到我决定我会很有趣地添加return $this->refresh();
以防止重新提交表单。最终Trying to get property of non-object
以模型的形式出现在视图中是正确的null
。
如我所见,重定向方法阻止执行渲染方法,因此模型变量无法发送到视图。
我正在使用 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; ?>