Сегодня мы с Мишей разговорились в ICQ. Разговор получился ОЧЕНЬ длинный и офигительно интересный. Читаем под катом:
fxposter (00:19:08 20/04/2008)
я немного о другомfxposter (00:19:20 20/04/2008)
ты используешь отдельные классы ZF в CIfxposter (00:19:32 20/04/2008)
у тебя основная логика - на CIfxposter (00:19:36 20/04/2008)
а мне она не нравитьсяmihailt (00:19:47 20/04/2008)
а чем?fxposter (00:20:07 20/04/2008)
основная логика у ZF классная - Controller - просто зашибись и View’хи очень хорошиеfxposter (00:20:48 20/04/2008)
но вот чтобы это всё скомпоновать (ZF) до уровня скомпонованности всего в симфе - нужно потратить прилично времени.fxposter (00:21:22 20/04/2008)
я тебе, кстати, могу сказать еще кое-что насчет CImihailt (00:21:28 20/04/2008)
м?fxposter (00:21:34 20/04/2008)
вот ты используешь ZF с CIfxposter (00:21:39 20/04/2008)
потому что “удобно”mihailt (00:21:48 20/04/2008)
угуfxposter (00:21:55 20/04/2008)
использовать CI в дополнении к ZF ты бы не сталfxposter (00:21:59 20/04/2008)
потому что - фигня![]()
mihailt (00:22:12 20/04/2008)
хехfxposter (00:22:23 20/04/2008)
ну не то, чтобы фигняfxposter (00:22:30 20/04/2008)
просто - не тоmihailt (00:22:38 20/04/2008)
хелперы бы скорее всего стал быfxposter (00:22:48 20/04/2008)
какие ?)fxposter (00:23:34 20/04/2008)
я, кстати, в ZF недавно просматривал View Helper’ыmihailt (00:23:34 20/04/2008)
да многие тот же form мне цишний больше нравитсяfxposter (00:23:46 20/04/2008)
формы в ZF такие жеfxposter (00:23:53 20/04/2008)
как и в симфе 1.0 и CIfxposter (00:24:04 20/04/2008)
только они уже почти deprecated![]()
fxposter (00:24:19 20/04/2008)
т.е. до появления Zend_Form такие хелперы там былиfxposter (00:24:23 20/04/2008)
и пока еще естьfxposter (00:24:52 20/04/2008)
мне вот понравилось, что добавили
partial partialLoop и action хелперыfxposter (00:24:56 20/04/2008)
в ZFmihailt (00:25:15 20/04/2008)
ну нифига не удобно мне кучу параметров в масиве передавать, удобней просто вызвать элемент формы и описать егоfxposter (00:25:36 20/04/2008)
каких параметров?fxposter (00:25:39 20/04/2008)
аfxposter (00:25:46 20/04/2008)
так тебе и не нужно![]()
fxposter (00:25:52 20/04/2008)
ты описываешь формуfxposter (00:25:55 20/04/2008)
как угодноfxposter (00:26:03 20/04/2008)
в том же ini-файле можно![]()
fxposter (00:26:52 20/04/2008)
а потом пишешь
$this->view->form = new MyForm();
а во вьюхе:
echo $this->form;mihailt (00:26:53 20/04/2008)
нееmihailt (00:27:08 20/04/2008)
вот именно это мне и не нравитсяfxposter (00:27:12 20/04/2008)
почему?mihailt (00:27:20 20/04/2008)
напоминает работу с XMLfxposter (00:27:29 20/04/2008)
знаешь, чем это лучшеfxposter (00:27:30 20/04/2008)
?fxposter (00:27:41 20/04/2008)
тем, что у тебя НИЧЕГО не дублируетсяfxposter (00:27:49 20/04/2008)
что ОЧЕНЬ хорошо по умолчаниюfxposter (00:28:10 20/04/2008)
и что всё, что относится к данной форме описывается в одном местеfxposter (00:28:16 20/04/2008)
а не в несколькихfxposter (00:28:33 20/04/2008)
это - очень хорошоmihailt (00:29:17 20/04/2008)
ну хз мне форму рассматривать как объект почему-то не очень нравитсяfxposter (00:29:29 20/04/2008)
лучше привыкай сейчас![]()
fxposter (00:29:36 20/04/2008)
или старайся привыкнутьfxposter (00:29:58 20/04/2008)
потому что такие системы очень помогаютfxposter (00:30:08 20/04/2008)
и помогают отвлечься от рутиныfxposter (00:30:15 20/04/2008)
от проверки валидностиfxposter (00:30:17 20/04/2008)
и прочегоfxposter (00:31:18 20/04/2008)
получается, что у тебя вместо этих доставших input-хелперов - формы строятся как единый обьектfxposter (00:31:53 20/04/2008)
все уже привыкли к фразеfxposter (00:31:59 20/04/2008)
“оно само себя рисует”fxposter (00:32:05 20/04/2008)
в ООПfxposter (00:32:29 20/04/2008)
только не все понимают, что это можно распространить на очень многоеfxposter (00:32:40 20/04/2008)
опиши форму - и дай ей сделать остальное за тебяfxposter (00:32:50 20/04/2008)
пропадет куча рутинной работыmihailt (00:33:00 20/04/2008)
типа кодегенерацияfxposter (00:33:03 20/04/2008)
нетfxposter (00:33:14 20/04/2008)
кодогенерация - это то, что ты input’ами пишешьfxposter (00:33:15 20/04/2008)
![]()
fxposter (00:33:19 20/04/2008)
только вручнуюfxposter (00:33:28 20/04/2008)
а тут оно просто “себя рисует”mihailt (00:33:41 20/04/2008)
ну сказать та что рисовать надоfxposter (00:33:41 20/04/2008)
когда ты на десктопе создаешь формочкуfxposter (00:33:46 20/04/2008)
это кодогенерация?fxposter (00:33:47 20/04/2008)
![]()
fxposter (00:33:52 20/04/2008)
нетmihailt (00:34:03 20/04/2008)
даfxposter (00:34:04 20/04/2008)
это выполнение отрисовки в рантаймеmihailt (00:34:14 20/04/2008)
хммfxposter (00:34:20 20/04/2008)
вот с формами так жеfxposter (00:34:29 20/04/2008)
т.е. - оно генерит HTMLfxposter (00:34:37 20/04/2008)
но, подумай, - HTMLfxposter (00:34:37 20/04/2008)
!fxposter (00:34:43 20/04/2008)
не php-кодfxposter (00:34:45 20/04/2008)
ничегоfxposter (00:34:54 20/04/2008)
оно ничего не eval’итfxposter (00:35:03 20/04/2008)
оно выдает просто строку результатаmihailt (00:35:15 20/04/2008)
хммfxposter (00:35:24 20/04/2008)
хотя на самом деле - на это можно смотреть по разному![]()
fxposter (00:35:58 20/04/2008)
но в любом случае - это не обычная статическая генерация кодаmihailt (00:36:03 20/04/2008)
озадачил ты меняfxposter (00:36:04 20/04/2008)
это всё происходит в динамикеfxposter (00:36:11 20/04/2008)
и это в рантайме можно менятьfxposter (00:36:18 20/04/2008)
правда, к этому всему нужно привыкнутьfxposter (00:36:34 20/04/2008)
и для этого - использовать что-то типа Zend_Formmihailt (00:36:44 20/04/2008)
то есть больше нефига не скриптовый языкfxposter (00:37:00 20/04/2008)
если честно, я сталкивался с мыслью, что что-то подобное должно бытьfxposter (00:37:05 20/04/2008)
когда делал много формfxposter (00:37:22 20/04/2008)
но именно ZF открым мне глаза на то, как это можно красиво сделать![]()
fxposter (00:37:52 20/04/2008)
вообще я под генерацией кода понимаю - генерируем что-то статическиfxposter (00:38:13 20/04/2008)
и это потом используем отдельноfxposter (00:38:24 20/04/2008)
как в симфе - сделать CRUD для таблицыmihailt (00:38:39 20/04/2008)
ты програмист-прагматик читал?fxposter (00:38:39 20/04/2008)
оно накидает html и php-файлов - и вот и кодогенерацияfxposter (00:38:41 20/04/2008)
нетfxposter (00:39:00 20/04/2008)
но собиралсяmihailt (00:39:03 20/04/2008)
так вот так кодегенерация описывалась по другомуmihailt (00:39:14 20/04/2008)
почитай кстати интересная штукаfxposter (00:39:37 20/04/2008)
это одна из самых советуемых книжек на programmingbooks раньше былоfxposter (00:39:39 20/04/2008)
былаmihailt (00:40:30 20/04/2008)
там люди для того чтобы не писать много однообразных программ написали программу которая принимала параматры и выдавала нужный кодfxposter (00:40:39 20/04/2008)
угуmihailt (00:41:04 20/04/2008)
блинmihailt (00:41:18 20/04/2008)
не могу объяснит у меня получается тоже что ты написалfxposter (00:41:35 20/04/2008)
но тогда можно считать, что если Zend_Form делает кодогенерацию, то такую же кодогенерацию делает любая функция, которая что-то возвращает![]()
mihailt (00:41:50 20/04/2008)
воmihailt (00:41:53 20/04/2008)
ты понялfxposter (00:42:02 20/04/2008)
я бы сказал так:mihailt (00:42:05 20/04/2008)
только не что-тоmihailt (00:42:12 20/04/2008)
а кодfxposter (00:42:14 20/04/2008)
нетfxposter (00:42:16 20/04/2008)
смотриfxposter (00:42:34 20/04/2008)
кодогенерация - это когда мы генерируем код на том же уровне, на котором был написан изначальныйfxposter (00:43:06 20/04/2008)
ну или как-то такmihailt (00:43:12 20/04/2008)
ну типо тогоfxposter (00:43:24 20/04/2008)
а то получается, что
echo “<html>…”;
это тоже кодогенерацияmihailt (00:43:44 20/04/2008)
неееfxposter (00:43:47 20/04/2008)
ага![]()
fxposter (00:44:06 20/04/2008)
echo “<html>…”;
это выражение генерирует html-код
fxposter (00:44:12 20/04/2008)
как и Zend_Formmihailt (00:45:01 20/04/2008)
нее ну в принципе круто, только почему то все равно не цепляетmihailt (00:45:05 20/04/2008)
но хзfxposter (00:45:07 20/04/2008)
![]()
fxposter (00:45:09 20/04/2008)
![]()
mihailt (00:45:14 20/04/2008)
может я передумаюfxposter (00:45:23 20/04/2008)
писец, вот это у нас матёро пошел разговорmihailt (00:45:24 20/04/2008)
говорю озадачил ты меняmihailt (00:45:31 20/04/2008)
да конкретно такmihailt (00:45:42 20/04/2008)
по гиковскиfxposter (00:45:48 20/04/2008)
просто суть в чемfxposter (00:45:57 20/04/2008)
есть неправильный кодfxposter (00:46:05 20/04/2008)
там много характеристикfxposter (00:46:59 20/04/2008)
но две из них:
1. дублирование
2. решение одной задачи во многих местах - расплылось решение по разным классам/функциям/файламfxposter (00:47:17 20/04/2008)
вот оба эти недостатка в себе сочетает подход с input’амиfxposter (00:47:26 20/04/2008)
и устраняется form-обьектамиfxposter (00:48:03 20/04/2008)
кстатиfxposter (00:48:06 20/04/2008)
!!!fxposter (00:48:10 20/04/2008)
офигенный аналогfxposter (00:48:18 20/04/2008)
источник данныхfxposter (00:48:23 20/04/2008)
ORM!fxposter (00:48:31 20/04/2008)
ну, или wrapper таблицыfxposter (00:48:35 20/04/2008)
или как в CIfxposter (00:48:38 20/04/2008)
непринципиальноmihailt (00:48:51 20/04/2008)
ну,fxposter (00:48:53 20/04/2008)
вместо того, чтобы писать в разных местах селектыfxposter (00:48:55 20/04/2008)
и прочееfxposter (00:49:06 20/04/2008)
мы инкапсулируем это всё в одном обьектеmihailt (00:49:11 20/04/2008)
такfxposter (00:49:13 20/04/2008)
и работаем уже с нимfxposter (00:49:21 20/04/2008)
предварительно его настроивfxposter (00:49:33 20/04/2008)
указав имя таблицы, поля и т.д.fxposter (00:49:40 20/04/2008)
вот с формами - ТО ЖЕ САМОЕfxposter (00:49:41 20/04/2008)
пипецfxposter (00:49:44 20/04/2008)
1 в 1 почтиmihailt (00:50:12 20/04/2008)
забавноmihailt (00:51:02 20/04/2008)
н в принципе наверное так и должно бытьfxposter (00:51:14 20/04/2008)
блин![]()
fxposter (00:51:21 20/04/2008)
я этот разговор выложу на блог![]()
fxposter (00:51:32 20/04/2008)
твоё имя упоминать?![]()
mihailt (00:51:47 20/04/2008)
давайmihailt (00:51:59 20/04/2008)
дашь травки немногоmihailt (00:52:00 20/04/2008)
)fxposter (00:52:04 20/04/2008)
ага![]()
mihailt (00:52:17 20/04/2008)
продолжаяmihailt (00:52:29 20/04/2008)
какая разница то, чего именно мы инкапсулируем?fxposter (00:53:00 20/04/2008)
в смысле?fxposter (00:53:10 20/04/2008)
я не совсем так выразилсяmihailt (00:53:11 20/04/2008)
есть объект и мы с ним работаемfxposter (00:53:17 20/04/2008)
не инкапсулируемfxposter (00:53:24 20/04/2008)
хотя и инкапсулируем то жеfxposter (00:53:27 20/04/2008)
*тожеmihailt (00:53:33 20/04/2008)
нее погодиmihailt (00:53:38 20/04/2008)
я щасfxposter (00:54:04 20/04/2008)
мы убираем дублирование пряча в один обьект функции/данные и т.д., которые отвечают за нечто общееmihailt (00:54:13 20/04/2008)
воmihailt (00:54:30 20/04/2008)
а что общее нам обсолютно пофигmihailt (00:54:38 20/04/2008)
абсолютноfxposter (00:54:43 20/04/2008)
ну естественно![]()
fxposter (00:55:03 20/04/2008)
опять же - два недостатка:1. дублирование
2. решение одной задачи во многих местах - расплылось решение по разным классам/функциям/файламfxposter (00:55:09 20/04/2008)
вот они во всей красеmihailt (00:55:36 20/04/2008)
так а чего дублируется то?fxposter (00:55:46 20/04/2008)
возьмем selectmihailt (00:56:06 20/04/2008)
я кароче походу врубился что зенд_форм хорошая вещьmihailt (00:56:11 20/04/2008)
![]()
fxposter (00:56:25 20/04/2008)
возьмем селектfxposter (00:56:56 20/04/2008)
function select(table, array columns, where)fxposter (00:57:02 20/04/2008)
можно еще добавить всегоfxposter (00:57:09 20/04/2008)
order там и прочееfxposter (00:57:32 20/04/2008)
если у нас на каждую таблицу 1 класс - то мы и table убираемmihailt (00:57:58 20/04/2008)
ну и где дублирование?fxposter (00:58:06 20/04/2008)
и получается, чтобы вместо “SELECT columns FROM TABLE WHERE” и т.д. мы вызываем одну функциюmihailt (00:58:25 20/04/2008)
угу ты придумал хелперfxposter (00:58:32 20/04/2008)
![]()
fxposter (00:58:42 20/04/2008)
я придумал active record еще скажи![]()
fxposter (00:58:59 20/04/2008)
это обычный table gateway (есть такой паттерн)mihailt (00:59:39 20/04/2008)
у банды в четырёх он есть?fxposter (00:59:42 20/04/2008)
нетfxposter (00:59:47 20/04/2008)
он у фаулера естьmihailt (00:59:52 20/04/2008)
окfxposter (00:59:53 20/04/2008)
в Patterns of EEAfxposter (00:59:55 20/04/2008)
или EAAfxposter (00:59:58 20/04/2008)
![]()
fxposter (01:00:12 20/04/2008)
или AAEfxposter (01:00:15 20/04/2008)
блиеfxposter (01:00:17 20/04/2008)
блинmihailt (01:00:18 20/04/2008)
типа ентерпрайз чего-то там?fxposter (01:00:23 20/04/2008)
агаmihailt (01:00:29 20/04/2008)
понялfxposter (01:00:31 20/04/2008)
EAAfxposter (01:00:35 20/04/2008)
всё-такиmihailt (01:00:51 20/04/2008)
не суть давай дальшеfxposter (01:00:55 20/04/2008)
далее - насчет дублированияfxposter (01:01:06 20/04/2008)
тебе нужно выбрать N статейfxposter (01:01:10 20/04/2008)
в нескольких местахfxposter (01:01:20 20/04/2008)
пишешь sql - вот тебе дублированиеfxposter (01:01:30 20/04/2008)
делаешь функцию с параметром N - вот его и нетfxposter (01:01:46 20/04/2008)
+ код, который работает с бд обьединен в одном местеmihailt (01:01:54 20/04/2008)
extends млинfxposter (01:02:01 20/04/2008)
![]()
mihailt (01:02:56 20/04/2008)
а ZF начинает такое делать для ХНТМLfxposter (01:03:05 20/04/2008)
в смысле?mihailt (01:03:23 20/04/2008)
в смысле зенд_формfxposter (01:03:50 20/04/2008)
там, кстати, насколько я помню еще и html поддерживается![]()
fxposter (01:04:03 20/04/2008)
по крайней мере что-то с хелперами проскакивалоfxposter (01:04:13 20/04/2008)
типа - есть поле isXhtmlfxposter (01:04:34 20/04/2008)
и в зависимости от него оно input-хелперы раньше генерировалоmihailt (01:04:38 20/04/2008)
в итоге получаем что пхп деву с хтмл вобще работать не нужно будетfxposter (01:04:51 20/04/2008)
не совсемfxposter (01:05:00 20/04/2008)
вот форму нужно выводитьmihailt (01:05:16 20/04/2008)
не смотриfxposter (01:05:16 20/04/2008)
ты можешь описать в самой форме -как ты её будешь выводитьfxposter (01:05:25 20/04/2008)
таблицамиfxposter (01:05:29 20/04/2008)
списками и т.д.mihailt (01:05:36 20/04/2008)
погодиfxposter (01:05:40 20/04/2008)
в каком-нибудь From_Viewfxposter (01:05:44 20/04/2008)
mihailt (01:05:50 20/04/2008)
смотриfxposter (01:05:57 20/04/2008)
экземпляр которого будет храниться в Zend_Fromfxposter (01:05:58 20/04/2008)
lffxposter (01:05:59 20/04/2008)
даmihailt (01:06:35 20/04/2008)
у нас есть код который берет чего нить из бд и создаёт структуру докумунтаmihailt (01:06:47 20/04/2008)
семантически правилныйfxposter (01:07:00 20/04/2008)
это ты к Zend_Formfxposter (01:07:06 20/04/2008)
или вообщеfxposter (01:07:07 20/04/2008)
?mihailt (01:07:23 20/04/2008)
вобще более глобальноfxposter (01:07:26 20/04/2008)
агаfxposter (01:07:27 20/04/2008)
нуmihailt (01:07:38 20/04/2008)
делаем это такmihailt (01:07:51 20/04/2008)
после того как получили пишемmihailt (01:08:14 20/04/2008)
$output = new $html;mihailt (01:08:40 20/04/2008)
а дальше appendChildfxposter (01:08:49 20/04/2008)
гмfxposter (01:09:00 20/04/2008)
тебя куда-то не туда понеслоfxposter (01:09:03 20/04/2008)
ты о чем?)mihailt (01:09:21 20/04/2008)
ну смотри что делает зенд_форм?mihailt (01:09:27 20/04/2008)
генерит формуfxposter (01:09:41 20/04/2008)
смотриfxposter (01:09:46 20/04/2008)
в общем случаеfxposter (01:09:57 20/04/2008)
ты, например, наследуешь от зенд-формmihailt (01:10:00 20/04/2008)
а в чем проблема сделать класс который будет весь документ генерит?fxposter (01:10:13 20/04/2008)
и указываешь ему, какие поля и что должно там бытьfxposter (01:10:29 20/04/2008)
проблемы нетfxposter (01:10:38 20/04/2008)
тебе View’ха его и генерит по сутиfxposter (01:10:39 20/04/2008)
fxposter (01:11:23 20/04/2008)
а вообще - да, можно на всё делать обьектыfxposter (01:11:30 20/04/2008)
собственно, DOM - это оно и естьmihailt (01:11:32 20/04/2008)
мне это почему то XSLT очень силно напоминаетmihailt (01:11:54 20/04/2008)
правда я с ним не работалfxposter (01:11:55 20/04/2008)
только не очень удобно работать на этом уровне с тегамиfxposter (01:11:58 20/04/2008)
я тожеfxposter (01:12:07 20/04/2008)
вот что-то типа такогоmihailt (01:13:06 20/04/2008)
но в принципе получается правилно, программист занят своим делом а именно составлением программы и обработкой данных а остальное его не касаетсяfxposter (01:13:28 20/04/2008)
$doc = new Document($content); // content - то, что получили из базы
$doc->setSidebar($sidebar); // если нам нужно использовать не default’ный sidebar, напримерfxposter (01:13:54 20/04/2008)
давай опустимся несколько нижеfxposter (01:13:58 20/04/2008)
на уровень MVCmihailt (01:14:05 20/04/2008)
давайfxposter (01:14:17 20/04/2008)
есть модель, есть её вьюха, есть контроллерmihailt (01:14:28 20/04/2008)
кастати мне его в последнее время не хватаетmihailt (01:14:40 20/04/2008)
окfxposter (01:14:52 20/04/2008)
пойми, что то, что реализовано в фреймворках - это не единое применениеfxposter (01:15:00 20/04/2008)
берем Zend_Formfxposter (01:15:13 20/04/2008)
модель - это поля, валидаторы и прочееfxposter (01:15:21 20/04/2008)
именно логическиmihailt (01:15:40 20/04/2008)
нуfxposter (01:15:44 20/04/2008)
контроллер - какие-нибудь внутренние события, обработчики и т.д.fxposter (01:15:56 20/04/2008)
в данном случае мне придмать что-то сложноfxposter (01:16:12 20/04/2008)
а view’ха - это то, что из себя эта форма представляет в htmlmihailt (01:16:32 20/04/2008)
погоди ты к чему? типа куда зенд_форм?fxposter (01:16:36 20/04/2008)
т.е. мы разделили сам Zend_Form на MVC-составляющиеmihailt (01:16:42 20/04/2008)
аа нуfxposter (01:17:00 20/04/2008)
> но в принципе получается правилно, программист занят своим делом а именно составлением программы и обработкой данных а остальное его не касаетсяfxposter (01:17:24 20/04/2008)
программист даже в Zend_Form может заняться моделью и контроллеромfxposter (01:17:35 20/04/2008)
оставив вьюху верстальщикуmihailt (01:17:47 20/04/2008)
именноfxposter (01:17:50 20/04/2008)
т.е. всё так же, как и с обычными страницамиfxposter (01:18:02 20/04/2008)
только на следующем уровнеfxposter (01:18:07 20/04/2008)
внутри самой страницыfxposter (01:18:18 20/04/2008)
и так можно описывать любые элементы страницыfxposter (01:18:26 20/04/2008)
хедер, футер, меню, логотипfxposter (01:18:31 20/04/2008)
как тебе удобноfxposter (01:18:37 20/04/2008)
но это в теорииmihailt (01:18:37 20/04/2008)
ну это уже NMVC получается, нет?fxposter (01:18:46 20/04/2008)
что такое N?mihailt (01:18:56 20/04/2008)
типа nestedfxposter (01:18:57 20/04/2008)
на практике такое вряд ли будетfxposter (01:19:01 20/04/2008)
fxposter (01:19:13 20/04/2008)
я такой терминологии не слышал, но так сказать можноmihailt (01:19:46 20/04/2008)
ну компонетный подход где каздй компонет проектируется по MVCfxposter (01:20:01 20/04/2008)
честно?mihailt (01:20:08 20/04/2008)
?fxposter (01:20:08 20/04/2008)
я с таким подходом не знакомmihailt (01:20:19 20/04/2008)
гмfxposter (01:20:25 20/04/2008)
т.е. я представляю, что оно такоеfxposter (01:20:34 20/04/2008)
но никогда в лоб не сталкивалсяfxposter (01:20:41 20/04/2008)
почему формы сюда попали (в категорию выделяемых в отдельный обьект), а остальные компоненты - нетfxposter (01:21:24 20/04/2008)
ну во первых, формы - это более общее понятие, типа Page, Document и т.д., ккоторые уже на MVC как раз разделены. А еще потому, что формы нужно обрабатыватьfxposter (01:21:30 20/04/2008)
на сервереmihailt (01:22:11 20/04/2008)
кстати про валидациюmihailt (01:22:37 20/04/2008)
в последнее время не вижу смысла в ней на стороне клиентаfxposter (01:22:42 20/04/2008)
fxposter (01:23:01 20/04/2008)
ну у меня к валидации смешанные чувстваmihailt (01:23:08 20/04/2008)
осjбенно при работе с ajaxfxposter (01:23:09 20/04/2008)
стараюсь делать код валиднымfxposter (01:23:19 20/04/2008)
но в принципе - не гонюсь за этимmihailt (01:23:29 20/04/2008)
нееmihailt (01:23:37 20/04/2008)
я про валидацию данныхmihailt (01:23:43 20/04/2008)
из формыfxposter (01:23:56 20/04/2008)
аfxposter (01:24:06 20/04/2008)
я её никогда не делалfxposter (01:24:14 20/04/2008)
смысл вижу явноfxposter (01:24:20 20/04/2008)
но не делалmihailt (01:24:34 20/04/2008)
стандартная хрен форма-валидация(клиент)-валидация(сервер)fxposter (01:24:39 20/04/2008)
смысл - БЫСТРО, реально БЫСТРО сказать пользователю, что он ввел фигнюmihailt (01:25:30 20/04/2008)
при использовани ajax все равно не вижуfxposter (01:25:50 20/04/2008)
пройдет пол секунды, пока ты получишь ответ с сервераfxposter (01:25:56 20/04/2008)
в лучшем случае - меньшеfxposter (01:26:06 20/04/2008)
но не абсолютно быстроmihailt (01:26:34 20/04/2008)
зато не будет безумных алёртовfxposter (01:26:42 20/04/2008)
+ нет дополнительных запросов к серваку, но для меня это на данный момент пока что не главный фактопfxposter (01:26:45 20/04/2008)
факторfxposter (01:27:05 20/04/2008)
> зато не будет безумных алёртов
не обязательно делать алертыmihailt (01:27:16 20/04/2008)
а если так же апдейтит див то вобще пофиг запрос всё равно естьfxposter (01:27:27 20/04/2008)
можно сделать сообщения об ошибках неотличимыми при серверной проверке и клиентскойfxposter (01:28:02 20/04/2008)
я тебе могу сказать одноmihailt (01:28:11 20/04/2008)
типа генерить хтмл во внутрь елемента по ид?fxposter (01:28:13 20/04/2008)
валидация на клиенте не необходимаfxposter (01:28:15 20/04/2008)
но удобнаfxposter (01:28:21 20/04/2008)
даfxposter (01:28:25 20/04/2008)
или просто по селекторуfxposter (01:28:29 20/04/2008)
непринципиальноmihailt (01:28:46 20/04/2008)
ну допустимmihailt (01:28:47 20/04/2008)
ноmihailt (01:28:58 20/04/2008)
получается тоже саме дублированиеfxposter (01:29:05 20/04/2008)
агаfxposter (01:29:11 20/04/2008)
но на разных уровняхfxposter (01:29:18 20/04/2008)
это разfxposter (01:29:50 20/04/2008)
и два - в теории никто не запрещает делать так, чтобы тот же Zend_From генерировал код с проверками на клиентеfxposter (01:30:04 20/04/2008)
т.е. описываем мы форму 1 разfxposter (01:30:13 20/04/2008)
а проверки оно всё само делаетmihailt (01:30:36 20/04/2008)
хрено получается на мой взгляд, код смешиваетсяfxposter (01:30:48 20/04/2008)
нетmihailt (01:30:54 20/04/2008)
в смысле в самом зенд_формfxposter (01:30:57 20/04/2008)
нетfxposter (01:31:04 20/04/2008)
Zend_Form_Viewfxposter (01:31:11 20/04/2008)
такого класса, наверное, нетfxposter (01:31:16 20/04/2008)
но суть понятнаmihailt (01:31:21 20/04/2008)
![]()
fxposter (01:31:23 20/04/2008)
ты наследуешься от негоfxposter (01:31:45 20/04/2008)
и в зависимости от валидаторов серверных - делаешь js-проверкиmihailt (01:32:13 20/04/2008)
придумали новый класс в zf’е осталось только написать и заккомититьmihailt (01:32:19 20/04/2008)
![]()
fxposter (01:32:22 20/04/2008)
не думаюfxposter (01:32:42 20/04/2008)
всё равно там zend-form разделено на модель и представлениеfxposter (01:32:44 20/04/2008)
или нет?fxposter (01:32:54 20/04/2008)
я не знаю, я zend-form не использовалfxposter (01:33:05 20/04/2008)
я больше по symfony 1.1 forms сужуfxposter (01:33:12 20/04/2008)
но суть работы та жеfxposter (01:33:55 20/04/2008)
т.е. можешь считать, что я тут говорил о неком Zend_Form, который в чем-то от настоящего Zend_Form отличаетсяfxposter (01:34:06 20/04/2008)
но суть не меняетmihailt (01:34:39 20/04/2008)
setAction(’/usr/login’)
->setMethod(’post’);// Create and configure username element:
$username = $form->createElement(’text’, ‘username’);
$username->addValidator(’alnum’)
->addValidator(’regex’, false, array(’/^[a-z]+/’))
->addValidator(’stringLength’, false, array(6, 20))
->setRequired(true)
->addFilter(’StringToLower’);// Create and configure password element:
$password = $form->createElement(’password’, ‘password’);
$password->addValidator(’StringLength’, false, array(6))
->setRequired(true);// Add elements to form:
$form->addElement($username)
->addElement($password)
// use addElement() as a factory to create ‘Login’ button:
->addElement(’submit’, ‘login’, array(’label’ => ‘Login’));
?>fxposter (01:34:56 20/04/2008)
ммfxposter (01:35:08 20/04/2008)
я бы всё это сделал в наследние Zend_Form’аfxposter (01:35:30 20/04/2008)
и мог бы потом reuse’ить такую форму логина во многих местахmihailt (01:35:58 20/04/2008)
ну это нормальноmihailt (01:36:26 20/04/2008)
я про клентскую частьmihailt (01:36:40 20/04/2008)
$username->addValidator(’alnum’)mihailt (01:37:00 20/04/2008)
$username->addValidator(’alnum’,'clientside’)mihailt (01:37:11 20/04/2008)
ну или что то типо тогоmihailt (01:37:30 20/04/2008)
по моему нормальноfxposter (01:38:22 20/04/2008)
даfxposter (01:38:36 20/04/2008)
в зенде есть zend_from_decoratorfxposter (01:38:47 20/04/2008)
который отвечает за отрисовку этого всего в htmlfxposter (01:38:55 20/04/2008)
судя по всемуmihailt (01:40:00 20/04/2008)
угу принимет 3 аргументаmihailt (01:40:39 20/04/2008)
содержимое, элемент и параметрыmihailt (01:40:50 20/04/2008)
смотрю на манmihailt (01:41:35 20/04/2008)
в принципе его для такого дела тоже можно заюзатьfxposter (01:43:01 20/04/2008)
ну вот он и должен в зависимости от валидаторов серверных, добавленных к элементу писать дополнительный js-кодfxposter (01:44:41 20/04/2008)
отдельные валидаторы для клиента прописывать - имхо, не есть хорошо. хотя - всё может быть.fxposter (01:44:44 20/04/2008)
ыmihailt (01:44:51 20/04/2008)
хммmihailt (01:45:01 20/04/2008)
воmihailt (01:45:03 20/04/2008)
Zend_Form_Decorator_Errorsfxposter (01:45:05 20/04/2008)
кстати, еще хорошо бы в валидаторы добавить
Zend_Validator_Viewfxposter (01:45:07 20/04/2008)
)))))))))0mihailt (01:45:12 20/04/2008)
вот он долженfxposter (01:45:25 20/04/2008)
нетfxposter (01:45:30 20/04/2008)
он выводит ошибкиfxposter (01:45:33 20/04/2008)
просто выводитfxposter (01:45:38 20/04/2008)
если они уже найденыmihailt (01:46:46 20/04/2008)
хммmihailt (01:46:49 20/04/2008)
тоже верноfxposter (01:46:49 20/04/2008)
в общем, тут долго можно размышлятьfxposter (01:47:00 20/04/2008)
но вряд ли это будет сделано в таком видеmihailt (01:47:13 20/04/2008)
даа ZF можно очень долго копатьfxposter (01:47:23 20/04/2008)
fxposter (01:47:25 20/04/2008)
угуfxposter (01:47:42 20/04/2008)
ладно, пойду я спатьmihailt (01:47:57 20/04/2008)
даа, чего то я тоже засиделсяmihailt (01:48:03 20/04/2008)
но поговорили хорошоfxposter (01:48:09 20/04/2008)
ага






Последние комментарии