RFC: многостраничные формы
Ключевые слова: wizard, tabbed dialog
Кому-нибудь приходилось реализовывать многостраничные формы / изучать готовые реализации? Сейчас с автором HTML::QuickForm обсуждаем как бы сделать средство для создания таковых форм на его базе. Пока архитектура вырисовывается следующая:
объект типа Controller
объект типа Page (потомок HTML_QuickForm)
объект типа Action
Просьба поругать/покомментировать. Реализация будет предложена в PEAR, т.ч. для себя стараетесь. :]
Ключевые слова: wizard, tabbed dialog
Кому-нибудь приходилось реализовывать многостраничные формы / изучать готовые реализации? Сейчас с автором HTML::QuickForm обсуждаем как бы сделать средство для создания таковых форм на его базе. Пока архитектура вырисовывается следующая:
- В каждую форму-страницу добавляется hidden поле, содержащее название страницы и несколько submit'ов, атрибуты name которых определяют выполняемые после отправки формы действия.
- Промежуточные результаты хранятся в сессии (ещё вариант использовать hidden поля, но он хуже: придётся проверять все данные на правильность при каждой отправке)
- Два варианта работы: переход на новую страницу возможен, если на текущей всё заполнено верно (wizard), переход возможен всегда, проверка при окончательной отправке формы (tabbed dialog).
объект типа Controller
- Содержит объекты типа Page (страница с формой)
- Позволяет зарегистрировать на себя объекты типа Action
- Проверяет переданные в запросе параметры и вызывает обработчик события нужной страницы (Page)
- Обеспечивает хранение данных в сессии
объект типа Page (потомок HTML_QuickForm)
- Имеет методы для построения формы и задания правил фильтрации / проверки введённых данных. Методы вызываются по необходимости, т.к. они весьма "тяжёлые"
- Позволяет зарегистрировать на себя объекты типа Action
- Обработка события происходит следующим образом: если есть свой Action, то вызывается он, если его нет, то обработка передаётся Controller'у. Таким образом имеем действие по умолчанию и действие для конкретной страницы.
объект типа Action
- Определяет некое действие ('display', 'save', 'back', 'next', 'go'...)
- Подразумевается, что пользователь будет определять свои классы-потомки Action в которых будет задана логика обработки формы
Просьба поругать/покомментировать. Реализация будет предложена в PEAR, т.ч. для себя стараетесь. :]