@liltrill

Как в Yii2 после добавления данных очистить форму и вывести flash сообщение на той же странице без повторной отправки?

public function actionAdd()
{
    $model = new News();

    if ($model->load(Yii::$app->request->post())) {
        if ($model->save()) {
            Yii::$app->session->setFlash('success', 'Удача: Новость добавлена!');
            $model = new News();
        } else {
            Yii::$app->session->setFlash('error', 'Ошибка: Не удалось добавить новость!');
        }
    }

    return $this->render('add', compact('model'));
}


И вот такой ужас при обновлении страницы:
5e0ec23330848537983155.png
  • Вопрос задан
  • 952 просмотра
Решения вопроса 2
@Nc_Soft
Нужно сделать редирект после записи формы, чтобы скинуть post. А в сессии останется flash сообщение.
Ответ написан
Комментировать
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Если вам не нужно делать редирект на другую страницу — можно перезагрузить страницу используя $this->refresh(). Страница перезагрузится, форма очистится, flash сообщения будут отображены. После чего можно снова заполнять форму новыми данными.

Из вашего кода пропадут лишние строки:

public function actionAdd()
{
    $model = new News();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        Yii::$app->session->setFlash('success', 'Удача: Новость добавлена!');
        return $this->refresh();
    } else {
        Yii::$app->session->setFlash('error', 'Ошибка: Не удалось добавить новость!');
    }

    return $this->render('add', compact('model'));
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы