@daMage

Как вернуть данные в форму?

Еще давно, когда логика и представление были в одном файле, было достаточно просто возвращать данные обратно в форму, если оные не проходили проверку на валидность. Но шло время, контроллеры толстели и худели, появлялась модель. Медленно, но верно приложения перешли на mvc. Должен сказать, формами никогда особо не занимался, обычно на сайте присутствовала регистрация и еще несколько простеньких форм. Поэтому, я всегда ограничивался валидацией и редиректом на страницу формы. До недавнего времени.

Для начала я хотел избавиться от редиректа и рендерить форму прямо в POST запросе. Но тут есть сложности. Нужно эмулировать текущий метод запроса как GET, дабы найти соответсвующий роут для формы, а также парсить реферер и создавать необходимые GET параметры, если я всё правильно понимаю. Мне кажется, что выигрыш в 50мс на запрос не стоит этих костылей.

Как вариант, при неудачной валидации, можно помещать переменные запроса в сессию и редиректить на страницу с формой. А в классе формы, при рендеринге, проверять существует ли необходимая переменная в хранилище. Пока склоняюсь к такому варианту, но смутил один момент. Что если на сайте присутствует загрузка файлов и размер POST данных учеличен, скажем, до 100 мб? Выходит, можно замусорить тело запроса и в сессионные файлы попадет много лишнего. Проверять Content-Length не пойдет, ведь заголовки можно подделать. И что остается, проверять(обрезать) длину строки каждой переменной?

Валидации на клиенте пока нет, но учитывая, что есть проверки требующие запросов к базе, то возврат данных в форму всё же нужен. Как вообще принято?
  • Вопрос задан
  • 312 просмотров
Решения вопроса 1
S-ed
@S-ed
Комбайнёр
Хорошая практика: проверять валидность на клиенте и на сервере.
Те данные что можно проверять на клиенте, проверять сразу при вводе.
Собрать данные с формы, создать запрос, аяксом отправить запрос с данными и ждать ответа, если получен положительный ответ (валидация прошла) - убрать форму, в противном случае ответ должен содержать информацию требующую правки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@heartdevil
плыву как воздушный шарик
Привет.

Пишите данные в сессию и не парьтесь). Если нужно грузить файлы по 100 мб, то придется грузить эти файлы. А проверки на вес по ходу придумаете, если это действительно надо.

Можно еще как-то сериализовать ваши промежуточные данные и держать их в форме.
Ответ написан
Ваш ответ на вопрос

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

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