Существует ли хорошо протестированная и, возможно, зрелая библиотека, для создания форм в PHP с обеих сторон клиента (сюда входит jQuery) и проверки на стороне сервера?
В идеале форма будет либо генерироваться из классов PHP, либо написана как простой HTML и проанализирована ala Agavi . Правильные jQuery-крючки будут автоматически создаваться библиотекой, чтобы можно было выполнить проверку на стороне клиента jQuery.
Одной из заданий, которые я выполняю регулярно, является некоторая вариация в старой доброй контактной форме, и я хотел бы стандартизировать эту работу, чтобы каждый раз выходить из одного и того же кода лучшей практики. Имея это в виду, HTML, сгенерированный PHP-классами, должен быть достаточно хорошим, чтобы дополнительные CSS-крючки могли быть добавлены там, где это необходимо.
Любые предложения с благодарностью получили.
Я расчесывал и просматривал варианты, которые я нашел, и что другие предложили ниже, и на данный момент я бы оценил проекты в следующем порядке для качества из небольшого количества тестов и исследований, которые я сделал для всех из них.
Я по-прежнему не убежден ни в одном из вариантов честности, и мне остается удивляться, почему люди, которые приступают к этим проектам, не начинаются с каких-то прочных и хорошо протестированных компонентов. Например, я бы подумал о комбинации:
Это даст вам хорошую стабильную базу для работы и создания хорошей библиотеки поверх тестируемых компонентов.
Также, если вас интересует библиотека, которая анализирует ваш HTML, а не генерирует HTML из класса PHP, я нашел проект под названием Minacl . Как вариант Агави, я упомянул в оригинальном вопросе.
Вы можете использовать ValidForm Builder . Он соответствует вашим требованиям: с его помощью вы можете определить Forms с правилами проверки в PHP и генерировать формы с помощью проверки jQuery и стороны клиента.
Список функций (взятых со своего сайта):
ОБНОВЛЕНО на 2017 год
Agile UI представляет собой библиотеку компонентов PHP UI (и преемника atk4.3), включая такие вещи, как:
Все компоненты имеют последовательный и простой интерфейс PHP:
$form = new \atk4\ui\Form(); $layout->add($form); $form->setModel(new Country($db));
Если вы предпочитаете CRUD, просто используйте \atk4\ui\CRUD
. Agile UI также предлагает инструменты для добавления пользовательских компонентов.
Сравнение с альтернативным программным обеспечением:
$form->render()
или для всего веб-приложения. Вариант, с которым я столкнулся, – jFormer , но у него очень короткая история, и PHP-код менее желателен с массивным 3000-линейным файлом, полным нескольких классов. Он не требует модульного подхода.
В чем конкретно проблемы с проверкой на стороне клиента в HTML_QuickForm2 ?
Для работы нужен файл quickform.js . Файл устанавливается вместе с пакетом, но не включается автоматически в выходной файл формы. Недавно я обновил документы, чтобы сделать эту проблему более очевидной.
Также у QF2 было несколько выпусков с вашего вопроса, несколько JS-связанных ошибок были раздавлены. Подумайте о том, чтобы дать ему еще одну попытку: мы нацелены на стабильный выпуск Really Soon Now и будем любить отзывы.
Просматривая репозиторий PEAR сегодня, я заметил, что HTML_QuickForm2 выпустил новую версию, которая теперь поддерживает проверку на стороне клиента. Он не использует jQuery, хотя они написали собственную структуру JS для работы.
Возможно, вы можете использовать структуру Symfony . Он обеспечивает уровень Model-View-Controller и автоматическое формирование формы из модели. Существует множество вариантов проверки. Но я думаю, что есть некоторые модификации, необходимые для интеграции проверки на стороне клиента JQuery.
Я просто наткнулся на плагин jQuery, называемый jquery-ahm . Он перемещает логику проверки на сервер, но выполняет ее на клиенте с помощью JavaScript. В нижней части страницы вы видите пример проверки формы.
Разметка HTML:
<form id="form" action="/a.form" method="post" class="ahm"> <p>Name</p> <input name="name" id="name" value="" type="text"> <p>Email</p> <input name="email" id="email" value="" type="text"> <p>Password</p> <input name="password" id="password" value="" type="text"> <br><input value="Submit Form" type="submit"> </form>
PHP-код:
<?php // catch errors foreach (array("name", "email", "password") as $key) { if (empty($_POST[$key])) { $error["#$key/addClass"] = "error"; $error["#$key/after"] = "<span class="error">Please enter $key</span>"; } } // get response if (!empty($error)) { $reset["input.error/removeClass"] = "error"; $reset["span.error/remove"] = ""; $response = $reset + $error; // reset errors before applying new ones } else { $response["#form/replaceWith"] = "<strong>Form successfully submitted</strong>"; } // return response return $response; ?>
Результат: