build и validate формы, средствами PHP

AmdY

Пью пиво
Команда форума
SergXP
вот простая обвеска для работы с формами http://amdy.su/work-with-forms/, но лучше воспользуйся полноценным решением, формы точно не будут тонким местом в твоём проекте.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Есть стремление, найти баланс между дальнейшей скоростью разработки и производительностью.
Стоит ли делать такой класс, или лучше вручную производить верстку форм.. на проект, с планируемой посещаемостью больше 500к уникальных посетителей в сутки..
думаю стоит задуматься..
а) Мне кажется, ты недостаточно хорошо представляешь трудозатраты по написанию полноценной библиотеки для работы с формами.
б) Надо бы провести реальное тестирование производительности имеющихся библиотек. Пока всё, что было в этой теме --- детский лепет на тему "если подгружать много файлов без акселератора, то это медленнее и ест больше памяти, чем если их не подгружать".
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Избавиться от любых кусков шаблона в PHP коде
Эээ... а с твоей точки зрения правила валидации являются частью шаблона?

Ну и ещё вопрос: я правильно понял, что для каждой формы потребуется создать свой уникальный шаблон?
 

tz-lom

Продвинутый новичок
Sad Spirit
Я опирался на то, что нужны не только правила валидации, но и способ выведения сообщений об ошибках, при включённом JS - сразу, и по возможности не выполняя запрос на сервер.
Т.к. правила валидации сравнительно просты, а изменения в форме могут быть весьма обширные, я решил вынести это в шаблон
Так же я сейчас думаю выйдет ли что то путное из затеи сделать меняющиеся на лету формы (у которых показывается часть полей в зависимости от введённых данных) , многостраничный вариант мне нравится меньше т.к. не удобен для пользователя.

Для каждой формы должны быть свои правила, в шаблоне может быть несколько форм, на это никаких ограничений нет, кроме того что неименованная форма может быть только одна
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Sad Spirit
Я опирался на то, что нужны не только правила валидации, но и способ выведения сообщений об ошибках, при включённом JS - сразу, и по возможности не выполняя запрос на сервер.
Т.к. правила валидации сравнительно просты, а изменения в форме могут быть весьма обширные, я решил вынести это в шаблон
Я не очень понимаю, как способ вывода сообщения об ошибках связан с заданием правил валидации, честно говоря. Насчёт JS --- согласен полностью, но опять не понимаю, причём он здесь. В принципе если "плясать от шаблона", то идея понятная, но обычно как бы шаблоны рисуют и валидацией занимаются разные люди.

Так же я сейчас думаю выйдет ли что то путное из затеи сделать меняющиеся на лету формы (у которых показывается часть полей в зависимости от введённых данных) , многостраничный вариант мне нравится меньше т.к. не удобен для пользователя.
Ну да, засилье неудобных для пользователя многостраничных визардов и форм с закладками --- коварный заговор производителей программного обеспечения. Привыкшему к ним пользователю будет гораздо удобнее увидеть что-нибудь новое, опять же.

Для каждой формы должны быть свои правила, в шаблоне может быть несколько форм, на это никаких ограничений нет, кроме того что неименованная форма может быть только одна
Ну то есть ещё раз: каждая форма рисуется вручную верстальщиком, никакого вывода по умолчанию не предусмотрено?
 

SergXP

Новичок
а) Мне кажется, ты недостаточно хорошо представляешь трудозатраты по написанию полноценной библиотеки для работы с формами.
б) Надо бы провести реальное тестирование производительности имеющихся библиотек. Пока всё, что было в этой теме --- детский лепет на тему "если подгружать много файлов без акселератора, то это медленнее и ест больше памяти, чем если их не подгружать".
так я подключил QuickForm2.. цифры вы видели.. меня они не обрадовали.
У меня фреймворк весит меньше.. но выполняет все что мне нужно... так чтобы подключить Form.. будет инклудиться еще доп 40 файлов.. зачем?
Это уже не пойдет для highload... я отказался от готовых решений Orm, ActiveRecord и тп...
реальное тестирование проблематично устроить.. иначе потом придется переделывать все.. а время у нас(программистов) ограниченно как вы знаете.
вообще стоит ли использовать эти генераторы? или стоит обойтись ручной версткой? только вот как быть с валидацией... она полюбому должна быть...
 

флоппик

promotor fidei
Команда форума
Партнер клуба
У меня фреймворк весит меньше.. но выполняет все что мне нужно... так чтобы подключить Form.. будет инклудиться еще доп 40 файлов.. зачем?
Это уже не пойдет для highload...
*facepalm*
Если кешировать результат работы этого генератора, скорость работы будет мало отличатся от сверстанных форм руками.
По моему, кое-кому рано рассуждать о таких словах как хайлоад.

offtopic: /me ждет Диму, который придет и расскажет про атомарную генерацию форм в труЪ-хайлоаде.
 
  • Like
Реакции: AmdY

tz-lom

Продвинутый новичок
Sad Spirit
да,идея - плясать от шаблона, и сократить количество отвергнутых форм при помощи валидации на клиенте
Ну да, засилье неудобных для пользователя многостраничных визардов и форм с закладками --- коварный заговор производителей программного обеспечения. Привыкшему к ним пользователю будет гораздо удобнее увидеть что-нибудь новое, опять же.
есть usecase где форма меняется на лету, например - радио для отправки отчёта на почту,или вывода в браузер, в первом случае должно быть окно для ввода email , в втором случае его не должно быть
но в конкретно таком примере как раз ничего лишнего не нужно, поэтому я ещё думаю над необходимостью
а визарды всё таки приятнее когда онлайн а не перезагрузки страниц
Ну то есть ещё раз: каждая форма рисуется вручную верстальщиком, никакого вывода по умолчанию не предусмотрено?
да,хотя возможно это и нужно...есть над чем подумать,спасибо
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
так я подключил QuickForm2.. цифры вы видели.. меня они не обрадовали.
Ну так это я и назвал детским лепетом. Какое отношение имеют цифры на винде без акселератора к реальной работе? Я вон тут недавно выяснял, почему у меня phing тупит.

У меня фреймворк весит меньше.. но выполняет все что мне нужно... так чтобы подключить Form.. будет инклудиться еще доп 40 файлов.. зачем?
Затем, чтобы не писать эти 40 файлов самому, очевидно. Также очевидно, что заточенное под себя решение будет, возможно, быстрее и легче. Но для того, чтобы узнать, надо ли это решение писать, сначала надо протестировать готовые, а это не сделано.

Это уже не пойдет для highload... я отказался от готовых решений Orm, ActiveRecord и тп...
Но при этом новый фейсбук у тебя всё равно не получится. Вот облом-то.

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


вообще стоит ли использовать эти генераторы? или стоит обойтись ручной версткой? только вот как быть с валидацией... она полюбому должна быть...
Вот-вот-вот. И валидация должна быть, и работа со значениями, и ещё много чего... Три класса по три тыщи строк, как и было сказано выше.
 

AmdY

Пью пиво
Команда форума
SergXP
Вот и сиди в валенках на пляже, зато в сибири ноги не замёрзнут. Если всё что тебя пугает - это скорость генерации на мифических хайлодах, то не используй генераторы в этих хайлодах, но до них нужно ещё дожить, да и проблемы там будут со сложным оформлением, а не со скоростью.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
есть usecase где форма меняется на лету, например - радио для отправки отчёта на почту,или вывода в браузер, в первом случае должно быть окно для ввода email , в втором случае его не должно быть
но в конкретно таком примере как раз ничего лишнего не нужно, поэтому я ещё думаю над необходимостью
Ну в QuickForm2 проверка подобных полей будет решаться, например, так:
PHP:
$radioEmail->addRule('empty', '', null, HTML_QuickForm2_Rule::CLIENT_SERVER) // включим заодно валидацию на клиенте
           ->or_($email->createRule('nonempty', 'Укажите адрес email'))
           ->and_($email->createRule('regex', 'Укажите правдоподобный адрес email', '/тут здоровенный regex/'));
А как у тебя будет подобное правило в шаблоне записываться? Учитывая, что обычное записывается вот так эстетично:
Код:
    <!--
        age {
            isNumeric: @#errage@<< Age must be number >> @#age@+error,
            inRange = (1,150) : @#errage@<< This cann't be your age >> @#age@+error
        }
    -->
 

SergXP

Новичок
Коллеги, я прошу помощи и совета от Вас, людей которые сталкивались с этим.
Не стоит кидать в меня помидорами )))
Кто-нибудь из Вас обслуживает такие проекты?
Покажите мне время генерации и объем памяти главной страницы этого проекта.
Мне достаточно много пришлось почитать форумов.. и многие утверждают что чистый PHP работает быстрее.
Я собираю для себя каркас, для удобства разработки!
Зачем мне тяжеловесы ORM, если чистый SQL работает в 10 раз быстрее?
Я не разрабатывал такие системы.. но приходилось обслуживать один израильский портал.. так вот, там как раз-таки проект работает практически на чистом коде..
На данный момент.. Controller,View,Model,Layouts,Db,Session.. вопрос возник насчет форм..
как лучше сделать.. если ли готовые легкие решения и тп...
если я подключу сейчас ActiveRecord + QuickForm2 + еще какие-та супер библиотеки.. можно забыть о скорости.. либо раскошелиться сразу на 20 серверов..
Да я тестирую на винде.. 3 машинах + тесты в конце провожу на Debian и затем уже на мощном 8 ядерном 8 гб сервере... именно отслеживаю статистику загрузки..

Каким образом генерируют формы высоконагруженные проекты? какие цифры показывают?
Лично я не знаю пока "нормальные" цифры... Извините но тот же супер-гибкий Зенд фреймворк жрет "9.16 мб\ 0.37 сек"... порядка 200 файлов инклудятся..
Да это сайт только для фотографа делать... Или кешировать все что только можно кешировать.. и пусть Raid массивы вешаются...

Сейчас 0.48 мб \ 0.013 cek.. с QuickForm2 = 2.70 мб\ 0.55 sek....
Не знаю..

AmdY, спасибо, сейчас гляну еще этот пример)
 

tz-lom

Продвинутый новичок
Sad Spirit
Код:
<!--
email {
  required: @#msgbox@<< Укажите адрес email >>,
  isEmail: @#msgbox@<< Укажите правдоподобный адрес email >>
}
-->
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Sad Spirit
Код:
<!--
email {
  required: @#msgbox@<< Укажите адрес email >>,
  isEmail: @#msgbox@<< Укажите правдоподобный адрес email >>
}
-->
не-не-не, у меня-то email проверяется только в том случае, если установлена радиокнопка "отправить на email"
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Лично я не знаю пока "нормальные" цифры... Извините но тот же супер-гибкий Зенд фреймворк жрет "9.16 мб\ 0.37 сек"... порядка 200 файлов инклудятся..
Да это сайт только для фотографа делать... Или кешировать все что только можно кешировать.. и пусть Raid массивы вешаются...

Сейчас 0.48 мб \ 0.013 cek.. с QuickForm2 = 2.70 мб\ 0.55 sek....
Я, кнэшно, понимаю, что здесь скорее всего прискорбный вариант "не в коня корм", но продемонстрирую, чё говорит профайлер по поводу запуска
а) под виндой
б) без акселератора
примера controller/simple.php из поставки QuickForm2:
profiler.png

Теперь понятно, почему твои цифры надо записать на бумажку, а бумажку затолкать ...?
 

tz-lom

Продвинутый новичок
Sad Spirit
а, я понял
как я говорил, работа в этом интерактивных форм не завершена, однако синтаксис предполагается следующий:
Код:
<!--
emailCheckbox {
  checkbox
}
   
email {  
  oneOf = ({
    isFieldEquals = (emailCheckbox, 0)
  },{
    required: @#msgbox@<< Укажите адрес email >>,
    isEmail: @#msgbox@<< Укажите правдоподобный адрес email >>
  })
}
-->
в принципе, единственное чего нет в репозитории сейчас - это директивы checkbox (крайне простой в описании, но я хочу избавиться от неё, чтобы генератор сам подставлял её на место галки, т.к это единственная валидация которая возможна)
 

SergXP

Новичок
хм.. интересно ))

Sad Spirit Вы хотите сказать, что все эти замеры "генерация, память" в особенности ничего не показывает?
Для более правильного анализа производительности необходимо пользоваться профайлером?
тогда стоит разобраться с этим.. помню год назад ставил xdebug, но что-то не стал осваивать.. а все-таки зря)

= добавлено =

Sad Spirit, что я могу сказать. Кажется как вариант данная библиотека меня устраивает)
Попробовал сгенерировал форму, с нужными для меня элементами.. довольно быстры, и кол-во файлов инклудится на порядок меньше)
Теперь попытаюсь отказаться от их автозагрузки, и подключить ее(библиотеку) к своему фреймворку,
Думаю не составит трудностей создать класс, и унаследовать основной класс этой библиотеки..

Спасибо!
 
Сверху