После отправки формы, если модель найдена в контроллере, представление отображается с установленным флэш-сообщением, но также с настраиваемым сообщением, например 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', он становится нулевым. [см.] (http://stackoverflow.com/questions/37959760/yii2-in-a-form-submission-model-is-null-after-redirect/37966072#comment63408655_37966072) @nana – Decimoseptimo