2008-09-13 2 views
5

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

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

ответ

5

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

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

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

также посмотреть на ответы на another question.

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

+0

Спасибо за предложение. Это звучит очень полезно, и я обязательно его проверю. – Readonly 2008-09-13 07:04:41

5

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

1

Я второй 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" 
4

Я написал статью об этом для OnLamp: Autofilled PHP Forms

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

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

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

fillInFormValues ​​() делает 2, 3 и 5 действительно легкими.

+0

+1 от меня. Я полностью согласен с вами и очень люблю внешний вид вашего класса fillInFormValues ​​(). – da5id 2009-01-28 22:16:27

1

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

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

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

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

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

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

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

0

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

Смежные вопросы