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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
4 189
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

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

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

Также посмотрите ответы на Другой вопрос.

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

Спасибо за предложение. Звучит очень полезно, и я обязательно его проверю.

Readonly 13.09.2008 11:04

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

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

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

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

С моей точки зрения, обработка форм сводится к:

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

fillInFormValues ​​() делает 2, 3 и 5 очень простыми.

+1 от меня. Я полностью с вами согласен, и мне очень нравится внешний вид вашего класса fillInFormValues ​​().

da5id 29.01.2009 01:16

Ссылка больше не действительна.

digitalextremist 30.06.2018 13:46

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

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

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

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

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

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

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

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

Другие вопросы по теме