Задать вопрос
nepster-web
@nepster-web

Как реализовать сообщение об ошибке после редиректа?

Собственно такой вопрос, есть следующая реализация:

Пользователь находится к примеру на странице /test1/

Нажимает на кнопку и попадает на страницу /test2/?id=17

Далее на странице test2 выполняются действия и если все успешно то необходимо отправить пользователя на страницу test3, если ошибка, то нужно вернуть на страницу test1 и показать сообщение об ошибке.

Все что пришло в голову это сессии. К примеру если страница test2 выдала ошибки, мы записываем флаг-переменную в сессию и на странице test1 проверяем, если есть флаг показать соответствующую ошибку.

Подскажите пожалуйста будет ли такая реализация уместна ?
  • Вопрос задан
  • 3267 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
silentvick
@silentvick
Это называется flash messages. Сообщение записывается в специальную переменную в сессии. При рендере страницы проверяется наличие такого сообщения. Если есть - оно выводится и сразу удаляется из сессии, чтобы исключить повторный вывод.
Yii. How to work with flash messages
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Я не знаю, что ты хочешь сделать, но догадываюсь. Для твоего случая, наверное, подошло бы использование одного скрипта test. То есть все бы выглядело так:
/test?page=1
/test?page=2&id=17
/test?page=3

Ну а то что переменные хранить в сессии - почему бы и нет?
Ответ написан
@tushev
Я обычно пользуюсь следующими вариантами:
1. Flash messages - написали выше, действительно многие php фреймворки так и делают.
2. Отказываюсь от редиректов, так чтобы можно было вывести и сообщение об ошибке и результат обработки на той же странице, где и происходит действие. Да, это потребует изменение путей пользователя на сайте.
3. Использую AJAX. Это решает сразу кучу проблем. Легко выводить сообщения об ошибках, делать серверную валидацию не теряя содержимого форм, отсутствие сдвигов скролинга страницы, меньше надо думать о пути пользователя по сайту во время обработки действий связанных с изменением данных и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы