Альтернатива PHP QuickForm? - PullRequest
       13

Альтернатива PHP QuickForm?

5 голосов
/ 13 сентября 2008

В настоящее время я работаю с HTML_QuickForm для создания форм в PHP. Кажется, это ограничивает то, что трудно вставить свой собственный javascript или настроить отображение и группировку определенных элементов.

Существуют ли альтернативы QuickForm, которые могут обеспечить большую гибкость?

Ответы [ 6 ]

5 голосов
/ 13 сентября 2008

Я обнаружил, что пакет Zend_Form Zend Framework особенно гибкий. Этот компонент также можно использовать с Zend_Dojo для быстрой реализации распространенных помощников по формам JavaScript. Тем не менее, компонент не зависит от используемой вами библиотеки, но поддерживает Dojo наивно. Компонент также позволяет группировать многостраничные формы, пользовательские декораторы, валидаторы и другие функции, что делает его очень гибким.

5 голосов
/ 13 сентября 2008

Если вам трудно вставить Javascript в элементы формы, рассмотрите возможность использования инфраструктуры JavaScript, такой как Prototype или jQuery . Там вы можете централизовать задачу внедрения обработки событий в элементы управления формой.

Под этим я подразумеваю, что вам не нужно вставлять обработчики событий в код HTML-формы. Вместо этого вы регистрируете эти события откуда-то еще. Например, в Prototype вы могли бы написать что-то вроде этого:

$('myFormControl').observe('click', myClickFunction)

Также взгляните на ответы на другой вопрос .

/ EDIT: конечно, вы также можете вставлять пользовательские атрибуты и, следовательно, обработчики событий в элементы формы, используя HTML_QuickForm. Тем не менее, вышеупомянутый способ лучше.

4 голосов
/ 23 января 2009

Я написал статью об этом для OnLamp: Автозаполненные формы PHP

Моя претензия к HTML_QuickForm и Zend_Form и ко всем другим фреймворкам обработки форм, которые я смог найти, заключается в том, что они, похоже, предполагают, что вы будете писать код для генерации формы. Но это не соответствовало моему процессу разработки, когда я начинал с LOOK страницы (заданного с помощью шаблонов HTML) и добавлял к нему функциональность.

На мой взгляд, обработка форм сводится к:

  1. Выборка данных, которые должны идти в форме для запуска (обычно из базы данных).
  2. Извлечение HTML-кода для формы (обычно это шаблон).
  3. Смешивание 1 и 2 вместе и вывод результата.
  4. Получение отправленных данных формы и их проверка.
  5. Повторное отображение формы с сообщениями об ошибках и неверными данными, ИЛИ
  6. Отображение страницы с поздравлениями, ваши данные были в порядке.

fillInFormValues ​​() упрощает 2, 3 и 5.

1 голос
/ 19 марта 2009

С Zend_Form вполне возможно начать визуально с вашей формы, а затем работать с обратными словами.

Это делается путем удаления всех декораторов и замены их декоратором ViewScript

$this->form->setDecorators( array(array('ViewScript', array('viewScript' => 'forms/aform.phtml'))));

И в этом viewScript вы бы сделали что-то вроде этого:

<?=$this->element->title->renderViewHelper()?>

Используя этот подход, вы можете делать с формой все, что захотите.

Еще одно замечательное свойство Zend_Form - вы можете создавать собственные элементы, которые могут инкапсулировать в них другие элементы. Например, у вас может быть элемент, который выводит текстовую область, а затем некоторый Javascript, чтобы превратить его в область WYSIWYG.

1 голос
/ 15 сентября 2008

Я буду вторым Zend_Form; у него отличная реализация в стиле ini, которая позволяет очень быстро определять форму:

[main]
vessel.form.method = "post"

vessel.form.elements.name.type = "text"
vessel.form.elements.name.name = "name"
vessel.form.elements.name.options.label = "Name: "
vessel.form.elements.name.options.required = true

vessel.form.elements.identifier_type.type = "select"
vessel.form.elements.identifier_type.name = "identifier_type"
vessel.form.elements.identifier_type.options.label = "Identifier type: "
vessel.form.elements.identifier_type.options.required = true
vessel.form.elements.identifier_type.options.multioptions.IMO Number = "IMO Number";
vessel.form.elements.identifier_type.options.multioptions.Registry organisation and Number = "Registry organisation and Number";
vessel.form.elements.identifier_type.options.multioptions.SSR Number = "SSR Number";

vessel.form.elements.identifier.type = "text"
vessel.form.elements.identifier.name = "identifier"
vessel.form.elements.identifier.options.label = "Identifier: "
vessel.form.elements.identifier.options.required = true
vessel.form.elements.identifier.options.filters.lower.filter = "StringToUpper"

vessel.form.elements.email.type = "text"
vessel.form.elements.email.name = "email"
vessel.form.elements.email.options.label = "Email: "
vessel.form.elements.email.options.required = true

vessel.form.elements.owner_id.type = "hidden"
vessel.form.elements.owner_id.name = "owner_id"
vessel.form.elements.owner_id.options.required = true

; submit button
vessel.form.elements.submit.type = "submit"
vessel.form.elements.submit.name = "Update"
vessel.form.elements.submit.option.value = "Update"
0 голосов
/ 19 марта 2009

Я ничего не могу сказать по этому поводу, но на днях я наткнулся на библиотеку форм clonefish . Это выглядело достаточно многообещающе, чтобы оказаться в моем списке закладок как «посмотрите на это позже».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...