Іноді нам потрібно розбити форму на кілька частин (сторінок), обробити їх окремо, а потім зібрати в один результат.
Ця стаття описує методи та шаблони проектування для цього.
Примітка: Примітка:.
Питання розбиття форми на декілька кроків є дуже складним, особливо якщо ви хочете зробити це якісно. У своєму житті я зустрічався з багатьма підходами, про які тут розповім. Деякі підходи виглядають привабливо, але є наївними і працюють лише в окремих випадках. Для кожного підходу я описую, коли він має сенс, а коли не має сенсу.
Зазвичай мета полягає в тому, щоб отримати основні дані з першої форми на першій сторінці, валідизувати їх, потім зберегти "десь" і вивести на екран наступну сторінку.
Коли користувач доходить до останньої сторінки, необхідно заповнити загальну форму та обробити введені дані.
На кожному кроці важливо завжди ретельно перевіряти всі дані та дозволяти користувачеві за бажанням пропускати сторінки назад, щоб він міг виправити дані, якщо виявить помилку. Крім того, якщо форма має бути відтворена умовно на основі вже отриманих даних, то це дуже трудомісткий процес.
Ми можемо або реалізувати окремі форми самостійно на чистому HTML, а потім обробляти їх на PHP, або скористатися готовими рішеннями, такими як Nette forms.
Приклад з життя
Дуже часто мені пишуть програмісти-початківці і задають, здавалося б, прості питання, на які є готове рішення. Наприклад, конкретно про обробку форм на PHP.
Я завжди рекомендую взагалі відмовитися від ручної обробки і використовувати готове рішення. В реальності дуже складно коректно реалізувати, наприклад, валідацію введеної електронної пошти і збіг 2-х паролів в 2-х полях, при цьому ми хочемо перенаправити користувача назад на попередньо заповнену форму за його даними і з повідомленням про помилку в разі помилки.
Тому що люди не знають, що вони не знають, що вони не знають і тому замість того, щоб інвестувати 1 годину часу у вивчення готового рішення 99,99% проблем, вони вважають за краще обирати власне рішення, на налагодження якого витрачають десятки годин, і все одно є випадки, коли форми не працюють, викидають помилки, мають уразливості в безпеці, не захищають введені дані.
Тому метою цього кроку є реалізація декількох сторінок за різними URL-адресами, які будуть містити порожні форми.
Кожну форму рекомендую реалізовувати незалежно від інших (атомарно), а передачу стану обробляти на іншому прикладному рівні. Причина полягає в тому, що кожна форма на практиці буде по-різному обробляти перевірку даних, по-різному писати свої результати, по-різному обробляти помилки, і ми, ймовірно, захочемо розширити або змінити її з часом, тому нам не потрібно знати контекст всього процесу і змінювати десятки сайтів для цього.
При обробці першої форми ми хочемо спочатку перевірити отримані дані і якщо вони правильні, то перенаправити користувача на другий крок. Це гарна ідея обробляти перенаправлення як HTTP-перенаправлення, тому що легко може статися так, що дані не є дійсними, і в цьому випадку ми хочемо повернути користувача до першої форми, а не до наступного кроку.
В принципі, ми можемо зберігати стани 4 способами:
Не рекомендується:.
Рекомендовано:** Рекомендовано:*
Жодне з наведених рішень не є ідеальним і єдино правильним. Я сам поєдную кілька підходів, коли працюю над багатокроковими рішеннями. Зазвичай, наприклад, я вирішую кошик як таблицю бази даних, якій присвоюю вже зібрані мною дані і прив'язую її або до користувача (якщо він авторизований), або до сесії (якщо він не авторизований і ми ще не знайомі).
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk