Существует ли form-builder (PHP) + validator (client/server) в одном флаконе?

Статус
В этой теме нельзя размещать новые ответы.

Groove

Новичок
Существует ли form-builder (PHP) + validator (client/server) в одном флаконе?

Собственно это вопрос-кросспост с хабра http://habrahabr.ru/qa/492/
Просьба поделиться решениями, которыми пользуетесь вы сами.
 

AmdY

Пью пиво
Команда форума
вообще не люблю клиентскую проверку на js, зачем это, если можно отослать форму аяксом. всё равно есть часть проверок, требующих запросов к серверу (уникальность, разрешённость варианта).
к тому же QuickForm можно прикрутить проверки js, часть их уже готова из коробки. для большей гибкости можно перегонять форму в массив, когда искал как это сделать попал на хорошую презентацию http://davidmintz.org/presentations/show.php/QuickForm_and_Smarty/1
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Groove
Собственно это вопрос-кросспост с хабра http://habrahabr.ru/qa/492/
Просьба поделиться решениями, которыми пользуетесь вы сами.
Во-первых, по процедурному вопросу: хотя мне и приятно читать "замечательная библиотека Алексея Борзова", пишу я её всё же не один, нехорошо по отношению к Bertrand'у получается.

Во-вторых, в текущем SVN HTML_QuickForm2 уже есть генерация жаваскрипта, правда пока достаточно сырая, но я щас работаю над этим.
 

tz-lom

Продвинутый новичок
Использую самописную библиотеку генерящую валидатор на основе вёрстки
 

Groove

Новичок
Автор оригинала: Sad Spirit
Во-первых, по процедурному вопросу: хотя мне и приятно читать "замечательная библиотека Алексея Борзова", пишу я её всё же не один, нехорошо по отношению к Bertrand'у получается.

Во-вторых, в текущем SVN HTML_QuickForm2 уже есть генерация жаваскрипта, правда пока достаточно сырая, но я щас работаю над этим.
По первому вопросу - поправился: http://habrahabr.ru/qa/492/
По-второму: подскажи, плиз, адрес SVN, нигде не могу найти упоминание про него.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума

fixxxer

К.О.
Партнер клуба
ничего не смотрел :) но подумалось, что js правильнее не генерить, а задавать параметры валидации в классах и атрибутах, и цеплять везде готовую либу.

как то так
<input
...
class="validated-element"
element-validator="regexp"
element-validator-arg="^\w{4,9}"
/>

правда, если хочется, чтобы html валидацию проходил, надо что-то еще придумать :) но атрибутами удобненько.
 

weregod

unserializer
единственное, что у меня пока придумалось для одновременного прохождения html-валидации и навешивания своих атрибутов, это опять тот же JS, добрасывающий атрибуты :(
смог ли кто-нибудь заставить браузер DTD-ху кастомную подгрузить?
 

fixxxer

К.О.
Партнер клуба
о, мне это даже в голову не приходило почему-то :)

но вроде же браузеры в целом смотрят тупо на наличие-отсутствие доктайпа на тему quirks/standards mode а на остальное побоку? или нет?
 

Groove

Новичок
Автор оригинала: fixxxer
ничего не смотрел :) но подумалось, что js правильнее не генерить, а задавать параметры валидации в классах и атрибутах, и цеплять везде готовую либу.

как то так
<input
...
class="validated-element"
element-validator="regexp"
element-validator-arg="^\w{4,9}"
/>

правда, если хочется, чтобы html валидацию проходил, надо что-то еще придумать :) но атрибутами удобненько.
Так это - http://vanadiumjs.com/
PHP:
<input class=":min_length;4 :max_length;8" type="text">
PHP:
<input id="pass" class=":required" type="password">         
<input class=":same_as;pass" type="password">
PHP:
<input id="field" class=":ajax;/username_checker/check.json" type="text">
 

fixxxer

К.О.
Партнер клуба
Как то так, да. Надеюсь, оно не очень долго парсится. :)

Вроде к моим формам это элементарно прикручивается, к тем же зендовским тоже.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: fixxxer
ничего не смотрел :) но подумалось, что js правильнее не генерить, а задавать параметры валидации в классах и атрибутах, и цеплять везде готовую либу.
ну так если правила проверки всё равно задаются с серверной стороны, то как-то эквипенисуально, что по ним генерить: сразу javascript или какие-то промежуточные непонятные атрибуты. Руками если рисовать --- да, атрибуты, наверное, удобнее. Либа готовая, естественно, предполагается в обоих случаях, щас у меня генерируется примерно следующее:
Код:
new qf.validator(document.getElementById('basicRules'), [
{
	callback: function() {var value = qf.form.getValue(document.getElementById('testUsername-0'));
 if (!value instanceof Array) { return value != ''; } else {
 var valid = 0; for (var i = 0; i < value.length; i++) { if ('' != value[i]) { valid++; } } return valid >= 1; } },
	elementId: 'testUsername-0',
	errorMessage: "Username is required",
	chained: [[]]
},
{
	callback: function() { var regex = /^[a-zA-Z]+$/; var value = qf.form.getValue(document.getElementById('testUsername-0'));
 return value == '' || regex.test(value); },
	elementId: 'testUsername-0',
	errorMessage: "Username should contain only letters",
	chained: [[]]
},
{
	callback: function() { return qf.form.getValue(document.getElementById('oldPassword-0')) == ''; },
	elementId: 'oldPassword-0',
	errorMessage: "Leave old password empty",
	chained: [[]]
},
...
а собственно код, который работает по этим правилам, находится в либе.
 

fixxxer

К.О.
Партнер клуба
Ну по большому счету, это конечно вкусовщина (я не люблю и всячески избегаю inline js). Но атрибуты всяко компактнее выходят.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: fixxxer
Ну по большому счету, это конечно вкусовщина (я не люблю и всячески избегаю inline js). Но атрибуты всяко компактнее выходят.
При большом желании можно этот ЖС сохранить в файл и подключать через <script src="...">, тут по компактности переплюнуть будет весьма сложно.
 

weregod

unserializer
кастомные валидаторы всё равно странно будет через инклюд пихать
так на каждую форму свой инклюд может выйти

и таки-жалко, что вместо возможности допилить DTD-ху приходится нецелево использовать имеющиеся атрибуты
 

akxxiv

Новичок
Меня озадачивает всеобщая истерия по поводу валидности кода. Сам стараюсь верстать валидно, однако слабо понимаю зачем мне это????
Кто может внятно объяснить зачем все это???? Интересует область самопридуманных атрибутов. Кому и чем они мешают???
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Я тут слегка допилил генерацию javascript'а в QF2, документации (кроме автоматически сгенерированной по текущему SVN trunk) и примеров покуда нету, т.ч. дам краткий обзор:

проверка на клиенте задаётся при добавлении правила через addRule():
PHP:
$username->addRule('regex', 'В имени пользователя должны быть только латинские буквы', '/^[a-zA-Z]+$/',
                   HTML_QuickForm2_Rule::SERVER | HTML_QuickForm2_Rule::CLIENT);
для всех встроенных правил, для которых проверка на клиенте имеет смысл, генерация жаваскрипта написана.

Скрипты разделены на две части: библиотеки, которые не выводятся автоматически, и должны быть выведены до формы (идеально --- вставлены в <head></head>) и сгенерированные скрипты для проверки формы, навешивания обработчиков и прочей настройки элементов. Вторые выводятся автоматически и должны быть расположены строго после формы, т.к. обращаются к её DOM. Скрипты генерируются при выполнении render() формы.

Вывалить форму вместе со всеми библиотеками в страницу можно так:
PHP:
require_once 'HTML/QuickForm2/Renderer.php';
$renderer = HTML_QuickForm2_Renderer::factory('default');

$form->render($renderer);
// выведет тексты JS библиотек (ну, в реальности там один файл)
echo $renderer->getJavascriptBuilder()->getLibraries(true, true);
// выведет форму со сгенерированным кодом проверки
echo $renderer;
Да, я заодно несколько укоротил генерируемый код по сравнению с вышепроцитированным.
 

Groove

Новичок
Sad Spirit, а использование jQuery в принципе претит идеологии HTML_QuickForm2?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Groove
Sad Spirit, а использование jQuery в принципе претит идеологии HTML_QuickForm2?
Отвечу вопросом на вопрос: а нахрена нам там jQuery? щас весь файл quickform.js в непожатом виде занимает 11 кб. Ну уменьшим мы его, допустим, до 9 килобайт (меньше уже вряд ли), получив взамен зависимость от 50+ кб (в пожатом виде) jQuery.
Визуальные эффекты мы добавлять не планируем, а что касается всяких $(document).ready(), то Бертран как раз посоветовал их не использовать, сославшись на следующее: https://groups.google.com/group/closure-library-discuss/browse_thread/thread/1beecbb5d6afcb41
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху