<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fxposter&#039;s wave &#187; Validation</title>
	<atom:link href="http://blog.fxposter.org/tag/validation/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fxposter.org</link>
	<description>Stories about Ruby, JavaScript, Objective-C and other cool tools</description>
	<lastBuildDate>Sun, 30 Oct 2011 20:00:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Формы как обьекты, Zend_Form, MVC, Validation и многое другое</title>
		<link>http://blog.fxposter.org/2008/04/20/programming-talks/</link>
		<comments>http://blog.fxposter.org/2008/04/20/programming-talks/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 22:52:00 +0000</pubDate>
		<dc:creator>fxposter</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Validation]]></category>
		<category><![CDATA[Zend-Framework]]></category>
		<category><![CDATA[Zend_Form]]></category>

		<guid isPermaLink="false">http://blog.fxposter.org/2008/04/20/programming-talks/</guid>
		<description><![CDATA[Сегодня мы с Мишей разговорились в ICQ. Разговор получился ОЧЕНЬ длинный и офигительно интересный. Читаем под катом: fxposter (00:19:08 20/04/2008) я немного о другом fxposter (00:19:20 20/04/2008) ты используешь отдельные классы ZF в CI fxposter (00:19:32 20/04/2008) у тебя основная логика - на CI fxposter (00:19:36 20/04/2008) а мне она не нравиться mihailt (00:19:47 20/04/2008) [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня мы с <a href="http://mihailt.wordpress.com/">Мишей</a> разговорились в ICQ. Разговор получился ОЧЕНЬ длинный и офигительно интересный. Читаем под катом:<br />
<span id="more-409"></span></p>
<blockquote><p> fxposter (00:19:08 20/04/2008)<br />
я немного о другом</p>
<p>fxposter (00:19:20 20/04/2008)<br />
ты используешь отдельные классы ZF в CI</p>
<p>fxposter (00:19:32 20/04/2008)<br />
у тебя основная логика - на CI</p>
<p>fxposter (00:19:36 20/04/2008)<br />
а мне она не нравиться</p>
<p>mihailt (00:19:47 20/04/2008)<br />
а чем?</p>
<p>fxposter (00:20:07 20/04/2008)<br />
основная логика у ZF классная - Controller - просто зашибись и View&#8217;хи очень хорошие</p>
<p>fxposter (00:20:48 20/04/2008)<br />
но вот чтобы это всё скомпоновать (ZF) до уровня скомпонованности всего в симфе - нужно потратить прилично времени.</p>
<p>fxposter (00:21:22 20/04/2008)<br />
я тебе, кстати, могу сказать еще кое-что насчет CI</p>
<p>mihailt (00:21:28 20/04/2008)<br />
м?</p>
<p>fxposter (00:21:34 20/04/2008)<br />
вот ты используешь ZF с CI</p>
<p>fxposter (00:21:39 20/04/2008)<br />
потому что &#8220;удобно&#8221;</p>
<p>mihailt (00:21:48 20/04/2008)<br />
угу</p>
<p>fxposter (00:21:55 20/04/2008)<br />
использовать CI в дополнении к ZF ты бы не стал</p>
<p>fxposter (00:21:59 20/04/2008)<br />
потому что - фигня :)</p>
<p>mihailt (00:22:12 20/04/2008)<br />
хех</p>
<p>fxposter (00:22:23 20/04/2008)<br />
ну не то, чтобы фигня</p>
<p>fxposter (00:22:30 20/04/2008)<br />
просто - не то</p>
<p>mihailt (00:22:38 20/04/2008)<br />
хелперы бы скорее всего стал бы</p>
<p>fxposter (00:22:48 20/04/2008)<br />
какие ?)</p>
<p>fxposter (00:23:34 20/04/2008)<br />
я, кстати, в ZF недавно просматривал View Helper&#8217;ы</p>
<p>mihailt (00:23:34 20/04/2008)<br />
да многие тот же form мне цишний больше нравится</p>
<p>fxposter (00:23:46 20/04/2008)<br />
формы в ZF такие же</p>
<p>fxposter (00:23:53 20/04/2008)<br />
как и в симфе 1.0 и CI</p>
<p>fxposter (00:24:04 20/04/2008)<br />
только они уже почти deprecated :)</p>
<p>fxposter (00:24:19 20/04/2008)<br />
т.е. до появления Zend_Form такие хелперы там были</p>
<p>fxposter (00:24:23 20/04/2008)<br />
и пока еще есть</p>
<p>fxposter (00:24:52 20/04/2008)<br />
мне вот понравилось, что добавили<br />
partial partialLoop и action хелперы</p>
<p>fxposter (00:24:56 20/04/2008)<br />
в ZF</p>
<p>mihailt (00:25:15 20/04/2008)<br />
ну нифига не удобно мне кучу параметров в масиве передавать, удобней просто вызвать элемент формы и описать его</p>
<p>fxposter (00:25:36 20/04/2008)<br />
каких параметров?</p>
<p>fxposter (00:25:39 20/04/2008)<br />
а</p>
<p>fxposter (00:25:46 20/04/2008)<br />
так тебе и не нужно :)</p>
<p>fxposter (00:25:52 20/04/2008)<br />
ты описываешь форму</p>
<p>fxposter (00:25:55 20/04/2008)<br />
как угодно</p>
<p>fxposter (00:26:03 20/04/2008)<br />
в том же ini-файле можно :)</p>
<p>fxposter (00:26:52 20/04/2008)<br />
а потом пишешь<br />
$this-&gt;view-&gt;form = new MyForm();<br />
а во вьюхе:<br />
echo $this-&gt;form;</p>
<p>mihailt (00:26:53 20/04/2008)<br />
нее</p>
<p>mihailt (00:27:08 20/04/2008)<br />
вот именно это мне и не нравится</p>
<p>fxposter (00:27:12 20/04/2008)<br />
почему?</p>
<p>mihailt (00:27:20 20/04/2008)<br />
напоминает работу с XML</p>
<p>fxposter (00:27:29 20/04/2008)<br />
знаешь, чем это лучше</p>
<p>fxposter (00:27:30 20/04/2008)<br />
?</p>
<p>fxposter (00:27:41 20/04/2008)<br />
тем, что у тебя НИЧЕГО не дублируется</p>
<p>fxposter (00:27:49 20/04/2008)<br />
что ОЧЕНЬ хорошо по умолчанию</p>
<p>fxposter (00:28:10 20/04/2008)<br />
и что всё, что относится к данной форме описывается в одном месте</p>
<p>fxposter (00:28:16 20/04/2008)<br />
а не в нескольких</p>
<p>fxposter (00:28:33 20/04/2008)<br />
это - очень хорошо</p>
<p>mihailt (00:29:17 20/04/2008)<br />
ну хз мне форму рассматривать как объект почему-то не очень нравится</p>
<p>fxposter (00:29:29 20/04/2008)<br />
лучше привыкай сейчас :)</p>
<p>fxposter (00:29:36 20/04/2008)<br />
или старайся привыкнуть</p>
<p>fxposter (00:29:58 20/04/2008)<br />
потому что такие системы очень помогают</p>
<p>fxposter (00:30:08 20/04/2008)<br />
и помогают отвлечься от рутины</p>
<p>fxposter (00:30:15 20/04/2008)<br />
от проверки валидности</p>
<p>fxposter (00:30:17 20/04/2008)<br />
и прочего</p>
<p>fxposter (00:31:18 20/04/2008)<br />
получается, что у тебя вместо этих доставших input-хелперов - формы строятся как единый обьект</p>
<p>fxposter (00:31:53 20/04/2008)<br />
все уже привыкли к фразе</p>
<p>fxposter (00:31:59 20/04/2008)<br />
&#8220;оно само себя рисует&#8221;</p>
<p>fxposter (00:32:05 20/04/2008)<br />
в ООП</p>
<p>fxposter (00:32:29 20/04/2008)<br />
только не все понимают, что это можно распространить на очень многое</p>
<p>fxposter (00:32:40 20/04/2008)<br />
опиши форму - и дай ей сделать остальное за тебя</p>
<p>fxposter (00:32:50 20/04/2008)<br />
пропадет куча рутинной работы</p>
<p>mihailt (00:33:00 20/04/2008)<br />
типа кодегенерация</p>
<p>fxposter (00:33:03 20/04/2008)<br />
нет</p>
<p>fxposter (00:33:14 20/04/2008)<br />
кодогенерация - это то, что ты input&#8217;ами пишешь</p>
<p>fxposter (00:33:15 20/04/2008)<br />
:)</p>
<p>fxposter (00:33:19 20/04/2008)<br />
только вручную</p>
<p>fxposter (00:33:28 20/04/2008)<br />
а тут оно просто &#8220;себя рисует&#8221;</p>
<p>mihailt (00:33:41 20/04/2008)<br />
ну сказать та что рисовать надо</p>
<p>fxposter (00:33:41 20/04/2008)<br />
когда ты на десктопе создаешь формочку</p>
<p>fxposter (00:33:46 20/04/2008)<br />
это кодогенерация?</p>
<p>fxposter (00:33:47 20/04/2008)<br />
:)</p>
<p>fxposter (00:33:52 20/04/2008)<br />
нет</p>
<p>mihailt (00:34:03 20/04/2008)<br />
да</p>
<p>fxposter (00:34:04 20/04/2008)<br />
это выполнение отрисовки в рантайме</p>
<p>mihailt (00:34:14 20/04/2008)<br />
хмм</p>
<p>fxposter (00:34:20 20/04/2008)<br />
вот с формами так же</p>
<p>fxposter (00:34:29 20/04/2008)<br />
т.е. - оно генерит HTML</p>
<p>fxposter (00:34:37 20/04/2008)<br />
но, подумай, - HTML</p>
<p>fxposter (00:34:37 20/04/2008)<br />
!</p>
<p>fxposter (00:34:43 20/04/2008)<br />
не php-код</p>
<p>fxposter (00:34:45 20/04/2008)<br />
ничего</p>
<p>fxposter (00:34:54 20/04/2008)<br />
оно ничего не eval&#8217;ит</p>
<p>fxposter (00:35:03 20/04/2008)<br />
оно выдает просто строку результата</p>
<p>mihailt (00:35:15 20/04/2008)<br />
хмм</p>
<p>fxposter (00:35:24 20/04/2008)<br />
хотя на самом деле - на это можно смотреть по разному :)</p>
<p>fxposter (00:35:58 20/04/2008)<br />
но в любом случае - это не обычная статическая генерация кода</p>
<p>mihailt (00:36:03 20/04/2008)<br />
озадачил ты меня</p>
<p>fxposter (00:36:04 20/04/2008)<br />
это всё происходит в динамике</p>
<p>fxposter (00:36:11 20/04/2008)<br />
и это в рантайме можно менять</p>
<p>fxposter (00:36:18 20/04/2008)<br />
правда, к этому всему нужно привыкнуть</p>
<p>fxposter (00:36:34 20/04/2008)<br />
и для этого - использовать что-то типа Zend_Form</p>
<p>mihailt (00:36:44 20/04/2008)<br />
то есть больше нефига не скриптовый язык</p>
<p>fxposter (00:37:00 20/04/2008)<br />
если честно, я сталкивался с мыслью, что что-то подобное должно быть</p>
<p>fxposter (00:37:05 20/04/2008)<br />
когда делал много форм</p>
<p>fxposter (00:37:22 20/04/2008)<br />
но именно ZF открым мне глаза на то, как это можно красиво сделать :)</p>
<p>fxposter (00:37:52 20/04/2008)<br />
вообще я под генерацией кода понимаю - генерируем что-то статически</p>
<p>fxposter (00:38:13 20/04/2008)<br />
и это потом используем отдельно</p>
<p>fxposter (00:38:24 20/04/2008)<br />
как в симфе - сделать CRUD для таблицы</p>
<p>mihailt (00:38:39 20/04/2008)<br />
ты програмист-прагматик читал?</p>
<p>fxposter (00:38:39 20/04/2008)<br />
оно накидает html и php-файлов - и вот и кодогенерация</p>
<p>fxposter (00:38:41 20/04/2008)<br />
нет</p>
<p>fxposter (00:39:00 20/04/2008)<br />
но собирался</p>
<p>mihailt (00:39:03 20/04/2008)<br />
так вот так кодегенерация описывалась по другому</p>
<p>mihailt (00:39:14 20/04/2008)<br />
почитай кстати интересная штука</p>
<p>fxposter (00:39:37 20/04/2008)<br />
это одна из самых советуемых книжек на programmingbooks раньше было</p>
<p>fxposter (00:39:39 20/04/2008)<br />
была</p>
<p>mihailt (00:40:30 20/04/2008)<br />
там люди для того чтобы не писать много однообразных программ написали программу которая принимала параматры и выдавала нужный код</p>
<p>fxposter (00:40:39 20/04/2008)<br />
угу</p>
<p>mihailt (00:41:04 20/04/2008)<br />
блин</p>
<p>mihailt (00:41:18 20/04/2008)<br />
не могу объяснит у меня получается тоже что ты написал</p>
<p>fxposter (00:41:35 20/04/2008)<br />
но тогда можно считать, что если Zend_Form делает кодогенерацию, то такую же кодогенерацию делает любая функция, которая что-то возвращает :)</p>
<p>mihailt (00:41:50 20/04/2008)<br />
во</p>
<p>mihailt (00:41:53 20/04/2008)<br />
ты понял</p>
<p>fxposter (00:42:02 20/04/2008)<br />
я бы сказал так:</p>
<p>mihailt (00:42:05 20/04/2008)<br />
только не что-то</p>
<p>mihailt (00:42:12 20/04/2008)<br />
а код</p>
<p>fxposter (00:42:14 20/04/2008)<br />
нет</p>
<p>fxposter (00:42:16 20/04/2008)<br />
смотри</p>
<p>fxposter (00:42:34 20/04/2008)<br />
кодогенерация - это когда мы генерируем код на том же уровне, на котором был написан изначальный</p>
<p>fxposter (00:43:06 20/04/2008)<br />
ну или как-то так</p>
<p>mihailt (00:43:12 20/04/2008)<br />
ну типо того</p>
<p>fxposter (00:43:24 20/04/2008)<br />
а то получается, что<br />
echo &#8220;&lt;html&gt;&#8230;&#8221;;<br />
это тоже кодогенерация</p>
<p>mihailt (00:43:44 20/04/2008)<br />
неее</p>
<p>fxposter (00:43:47 20/04/2008)<br />
ага ;)</p>
<p>fxposter (00:44:06 20/04/2008)</p>
<p>echo &#8220;&lt;html&gt;&#8230;&#8221;;</p>
<p>это выражение генерирует html-код</p>
<p>fxposter (00:44:12 20/04/2008)<br />
как и Zend_Form</p>
<p>mihailt (00:45:01 20/04/2008)<br />
нее ну в принципе круто, только почему то все равно не цепляет</p>
<p>mihailt (00:45:05 20/04/2008)<br />
но хз</p>
<p>fxposter (00:45:07 20/04/2008)<br />
:-D</p>
<p>fxposter (00:45:09 20/04/2008)<br />
:)</p>
<p>mihailt (00:45:14 20/04/2008)<br />
может я передумаю</p>
<p>fxposter (00:45:23 20/04/2008)<br />
писец, вот это у нас матёро пошел разговор</p>
<p>mihailt (00:45:24 20/04/2008)<br />
говорю озадачил ты меня</p>
<p>mihailt (00:45:31 20/04/2008)<br />
да конкретно так</p>
<p>mihailt (00:45:42 20/04/2008)<br />
по гиковски</p>
<p>fxposter (00:45:48 20/04/2008)<br />
просто суть в чем</p>
<p>fxposter (00:45:57 20/04/2008)<br />
есть неправильный код</p>
<p>fxposter (00:46:05 20/04/2008)<br />
там много характеристик</p>
<p>fxposter (00:46:59 20/04/2008)<br />
но две из них:<br />
1. дублирование<br />
2. решение одной задачи во многих местах - расплылось решение по разным классам/функциям/файлам</p>
<p>fxposter (00:47:17 20/04/2008)<br />
вот оба эти недостатка в себе сочетает подход с input&#8217;ами</p>
<p>fxposter (00:47:26 20/04/2008)<br />
и устраняется form-обьектами</p>
<p>fxposter (00:48:03 20/04/2008)<br />
кстати</p>
<p>fxposter (00:48:06 20/04/2008)<br />
!!!</p>
<p>fxposter (00:48:10 20/04/2008)<br />
офигенный аналог</p>
<p>fxposter (00:48:18 20/04/2008)<br />
источник данных</p>
<p>fxposter (00:48:23 20/04/2008)<br />
ORM!</p>
<p>fxposter (00:48:31 20/04/2008)<br />
ну, или wrapper таблицы</p>
<p>fxposter (00:48:35 20/04/2008)<br />
или как в CI</p>
<p>fxposter (00:48:38 20/04/2008)<br />
непринципиально</p>
<p>mihailt (00:48:51 20/04/2008)<br />
ну,</p>
<p>fxposter (00:48:53 20/04/2008)<br />
вместо того, чтобы писать в разных местах селекты</p>
<p>fxposter (00:48:55 20/04/2008)<br />
и прочее</p>
<p>fxposter (00:49:06 20/04/2008)<br />
мы инкапсулируем это всё в одном обьекте</p>
<p>mihailt (00:49:11 20/04/2008)<br />
так</p>
<p>fxposter (00:49:13 20/04/2008)<br />
и работаем уже с ним</p>
<p>fxposter (00:49:21 20/04/2008)<br />
предварительно его настроив</p>
<p>fxposter (00:49:33 20/04/2008)<br />
указав имя таблицы, поля и т.д.</p>
<p>fxposter (00:49:40 20/04/2008)<br />
вот с формами - ТО ЖЕ САМОЕ</p>
<p>fxposter (00:49:41 20/04/2008)<br />
пипец</p>
<p>fxposter (00:49:44 20/04/2008)<br />
1 в 1 почти</p>
<p>mihailt (00:50:12 20/04/2008)<br />
забавно</p>
<p>mihailt (00:51:02 20/04/2008)<br />
н в принципе наверное так и должно быть</p>
<p>fxposter (00:51:14 20/04/2008)<br />
блин :)</p>
<p>fxposter (00:51:21 20/04/2008)<br />
я этот разговор выложу на блог :)</p>
<p>fxposter (00:51:32 20/04/2008)<br />
твоё имя упоминать? :)</p>
<p>mihailt (00:51:47 20/04/2008)<br />
давай</p>
<p>mihailt (00:51:59 20/04/2008)<br />
дашь травки немного</p>
<p>mihailt (00:52:00 20/04/2008)<br />
)</p>
<p>fxposter (00:52:04 20/04/2008)<br />
ага :)</p>
<p>mihailt (00:52:17 20/04/2008)<br />
продолжая</p>
<p>mihailt (00:52:29 20/04/2008)<br />
какая разница то, чего именно мы инкапсулируем?</p>
<p>fxposter (00:53:00 20/04/2008)<br />
в смысле?</p>
<p>fxposter (00:53:10 20/04/2008)<br />
я не совсем так выразился</p>
<p>mihailt (00:53:11 20/04/2008)<br />
есть объект и мы с ним работаем</p>
<p>fxposter (00:53:17 20/04/2008)<br />
не инкапсулируем</p>
<p>fxposter (00:53:24 20/04/2008)<br />
хотя и инкапсулируем то же</p>
<p>fxposter (00:53:27 20/04/2008)<br />
*тоже</p>
<p>mihailt (00:53:33 20/04/2008)<br />
нее погоди</p>
<p>mihailt (00:53:38 20/04/2008)<br />
я щас</p>
<p>fxposter (00:54:04 20/04/2008)<br />
мы убираем дублирование пряча в один обьект функции/данные и т.д., которые отвечают за нечто общее</p>
<p>mihailt (00:54:13 20/04/2008)<br />
во</p>
<p>mihailt (00:54:30 20/04/2008)<br />
а что общее нам обсолютно пофиг</p>
<p>mihailt (00:54:38 20/04/2008)<br />
абсолютно</p>
<p>fxposter (00:54:43 20/04/2008)<br />
ну естественно :)</p>
<p>fxposter (00:55:03 20/04/2008)<br />
опять же - два недостатка:</p>
<p>1. дублирование<br />
2. решение одной задачи во многих местах - расплылось решение по разным классам/функциям/файлам</p>
<p>fxposter (00:55:09 20/04/2008)<br />
вот они во всей красе</p>
<p>mihailt (00:55:36 20/04/2008)<br />
так а чего дублируется то?</p>
<p>fxposter (00:55:46 20/04/2008)<br />
возьмем select</p>
<p>mihailt (00:56:06 20/04/2008)<br />
я кароче походу врубился что зенд_форм хорошая вещь</p>
<p>mihailt (00:56:11 20/04/2008)<br />
:)</p>
<p>fxposter (00:56:25 20/04/2008)<br />
возьмем селект</p>
<p>fxposter (00:56:56 20/04/2008)<br />
function select(table, array columns, where)</p>
<p>fxposter (00:57:02 20/04/2008)<br />
можно еще добавить всего</p>
<p>fxposter (00:57:09 20/04/2008)<br />
order там и прочее</p>
<p>fxposter (00:57:32 20/04/2008)<br />
если у нас на каждую таблицу 1 класс - то мы и table убираем</p>
<p>mihailt (00:57:58 20/04/2008)<br />
ну и где дублирование?</p>
<p>fxposter (00:58:06 20/04/2008)<br />
и получается, чтобы вместо &#8220;SELECT columns FROM TABLE WHERE&#8221; и т.д. мы вызываем одну функцию</p>
<p>mihailt (00:58:25 20/04/2008)<br />
угу ты придумал хелпер</p>
<p>fxposter (00:58:32 20/04/2008)<br />
:)</p>
<p>fxposter (00:58:42 20/04/2008)<br />
я придумал active record еще скажи :)</p>
<p>fxposter (00:58:59 20/04/2008)<br />
это обычный table gateway (есть такой паттерн)</p>
<p>mihailt (00:59:39 20/04/2008)<br />
у банды в четырёх он есть?</p>
<p>fxposter (00:59:42 20/04/2008)<br />
нет</p>
<p>fxposter (00:59:47 20/04/2008)<br />
он у фаулера есть</p>
<p>mihailt (00:59:52 20/04/2008)<br />
ок</p>
<p>fxposter (00:59:53 20/04/2008)<br />
в Patterns of EEA</p>
<p>fxposter (00:59:55 20/04/2008)<br />
или EAA</p>
<p>fxposter (00:59:58 20/04/2008)<br />
:)</p>
<p>fxposter (01:00:12 20/04/2008)<br />
или AAE</p>
<p>fxposter (01:00:15 20/04/2008)<br />
блие</p>
<p>fxposter (01:00:17 20/04/2008)<br />
блин</p>
<p>mihailt (01:00:18 20/04/2008)<br />
типа ентерпрайз чего-то там?</p>
<p>fxposter (01:00:23 20/04/2008)<br />
ага</p>
<p>mihailt (01:00:29 20/04/2008)<br />
понял</p>
<p>fxposter (01:00:31 20/04/2008)<br />
EAA</p>
<p>fxposter (01:00:35 20/04/2008)<br />
всё-таки</p>
<p>mihailt (01:00:51 20/04/2008)<br />
не суть давай дальше</p>
<p>fxposter (01:00:55 20/04/2008)<br />
далее - насчет дублирования</p>
<p>fxposter (01:01:06 20/04/2008)<br />
тебе нужно выбрать N статей</p>
<p>fxposter (01:01:10 20/04/2008)<br />
в нескольких местах</p>
<p>fxposter (01:01:20 20/04/2008)<br />
пишешь sql - вот тебе дублирование</p>
<p>fxposter (01:01:30 20/04/2008)<br />
делаешь функцию с параметром N - вот его и нет</p>
<p>fxposter (01:01:46 20/04/2008)<br />
+ код, который работает с бд обьединен в одном месте</p>
<p>mihailt (01:01:54 20/04/2008)<br />
extends млин</p>
<p>fxposter (01:02:01 20/04/2008)<br />
;)</p>
<p>mihailt (01:02:56 20/04/2008)<br />
а ZF начинает такое делать для ХНТМL</p>
<p>fxposter (01:03:05 20/04/2008)<br />
в смысле?</p>
<p>mihailt (01:03:23 20/04/2008)<br />
в смысле зенд_форм</p>
<p>fxposter (01:03:50 20/04/2008)<br />
там, кстати, насколько я помню еще и html поддерживается :)</p>
<p>fxposter (01:04:03 20/04/2008)<br />
по крайней мере что-то с хелперами проскакивало</p>
<p>fxposter (01:04:13 20/04/2008)<br />
типа - есть поле isXhtml</p>
<p>fxposter (01:04:34 20/04/2008)<br />
и в зависимости от него оно input-хелперы раньше генерировало</p>
<p>mihailt (01:04:38 20/04/2008)<br />
в итоге получаем что пхп деву с хтмл  вобще работать не нужно будет</p>
<p>fxposter (01:04:51 20/04/2008)<br />
не совсем</p>
<p>fxposter (01:05:00 20/04/2008)<br />
вот форму нужно выводить</p>
<p>mihailt (01:05:16 20/04/2008)<br />
не смотри</p>
<p>fxposter (01:05:16 20/04/2008)<br />
ты можешь описать в самой форме -как ты её будешь выводить</p>
<p>fxposter (01:05:25 20/04/2008)<br />
таблицами</p>
<p>fxposter (01:05:29 20/04/2008)<br />
списками и т.д.</p>
<p>mihailt (01:05:36 20/04/2008)<br />
погоди</p>
<p>fxposter (01:05:40 20/04/2008)<br />
в каком-нибудь From_View</p>
<p>fxposter (01:05:44 20/04/2008)</p>
<p>mihailt (01:05:50 20/04/2008)<br />
смотри</p>
<p>fxposter (01:05:57 20/04/2008)<br />
экземпляр которого будет храниться в Zend_From</p>
<p>fxposter (01:05:58 20/04/2008)<br />
lf</p>
<p>fxposter (01:05:59 20/04/2008)<br />
да</p>
<p>mihailt (01:06:35 20/04/2008)<br />
у нас есть код который берет чего нить из бд и создаёт структуру докумунта</p>
<p>mihailt (01:06:47 20/04/2008)<br />
семантически правилный</p>
<p>fxposter (01:07:00 20/04/2008)<br />
это ты к Zend_Form</p>
<p>fxposter (01:07:06 20/04/2008)<br />
или вообще</p>
<p>fxposter (01:07:07 20/04/2008)<br />
?</p>
<p>mihailt (01:07:23 20/04/2008)<br />
вобще более глобально</p>
<p>fxposter (01:07:26 20/04/2008)<br />
ага</p>
<p>fxposter (01:07:27 20/04/2008)<br />
ну</p>
<p>mihailt (01:07:38 20/04/2008)<br />
делаем это так</p>
<p>mihailt (01:07:51 20/04/2008)<br />
после того как получили пишем</p>
<p>mihailt (01:08:14 20/04/2008)<br />
$output = new $html;</p>
<p>mihailt (01:08:40 20/04/2008)<br />
а дальше appendChild</p>
<p>fxposter (01:08:49 20/04/2008)<br />
гм</p>
<p>fxposter (01:09:00 20/04/2008)<br />
тебя куда-то не туда понесло</p>
<p>fxposter (01:09:03 20/04/2008)<br />
ты о чем?)</p>
<p>mihailt (01:09:21 20/04/2008)<br />
ну смотри что делает зенд_форм?</p>
<p>mihailt (01:09:27 20/04/2008)<br />
генерит форму</p>
<p>fxposter (01:09:41 20/04/2008)<br />
смотри</p>
<p>fxposter (01:09:46 20/04/2008)<br />
в общем случае</p>
<p>fxposter (01:09:57 20/04/2008)<br />
ты, например, наследуешь от зенд-форм</p>
<p>mihailt (01:10:00 20/04/2008)<br />
а в чем проблема сделать класс который будет весь документ генерит?</p>
<p>fxposter (01:10:13 20/04/2008)<br />
и указываешь ему, какие поля и что должно там быть</p>
<p>fxposter (01:10:29 20/04/2008)<br />
проблемы нет</p>
<p>fxposter (01:10:38 20/04/2008)<br />
тебе View&#8217;ха его и генерит по сути</p>
<p>fxposter (01:10:39 20/04/2008)</p>
<p>fxposter (01:11:23 20/04/2008)<br />
а вообще - да, можно на всё делать обьекты</p>
<p>fxposter (01:11:30 20/04/2008)<br />
собственно, DOM - это оно и есть</p>
<p>mihailt (01:11:32 20/04/2008)<br />
мне это почему то XSLT очень силно напоминает</p>
<p>mihailt (01:11:54 20/04/2008)<br />
правда я с ним не работал</p>
<p>fxposter (01:11:55 20/04/2008)<br />
только не очень удобно работать на этом уровне с тегами</p>
<p>fxposter (01:11:58 20/04/2008)<br />
я тоже</p>
<p>fxposter (01:12:07 20/04/2008)<br />
вот что-то типа такого</p>
<p>mihailt (01:13:06 20/04/2008)<br />
но в принципе получается правилно, программист занят своим делом а именно составлением программы и обработкой данных а остальное его не касается</p>
<p>fxposter (01:13:28 20/04/2008)<br />
$doc = new Document($content); // content - то, что получили из базы<br />
$doc-&gt;setSidebar($sidebar); // если нам нужно использовать не default&#8217;ный sidebar, например</p>
<p>fxposter (01:13:54 20/04/2008)<br />
давай опустимся несколько ниже</p>
<p>fxposter (01:13:58 20/04/2008)<br />
на уровень MVC</p>
<p>mihailt (01:14:05 20/04/2008)<br />
давай</p>
<p>fxposter (01:14:17 20/04/2008)<br />
есть модель, есть её вьюха, есть контроллер</p>
<p>mihailt (01:14:28 20/04/2008)<br />
кастати мне его в последнее время не хватает</p>
<p>mihailt (01:14:40 20/04/2008)<br />
ок</p>
<p>fxposter (01:14:52 20/04/2008)<br />
пойми, что то, что реализовано в фреймворках - это не единое применение</p>
<p>fxposter (01:15:00 20/04/2008)<br />
берем Zend_Form</p>
<p>fxposter (01:15:13 20/04/2008)<br />
модель - это поля, валидаторы и прочее</p>
<p>fxposter (01:15:21 20/04/2008)<br />
именно логически</p>
<p>mihailt (01:15:40 20/04/2008)<br />
ну</p>
<p>fxposter (01:15:44 20/04/2008)<br />
контроллер - какие-нибудь внутренние события, обработчики и т.д.</p>
<p>fxposter (01:15:56 20/04/2008)<br />
в данном случае мне придмать что-то сложно</p>
<p>fxposter (01:16:12 20/04/2008)<br />
а view&#8217;ха - это то, что из себя эта форма представляет в html</p>
<p>mihailt (01:16:32 20/04/2008)<br />
погоди ты к чему? типа куда зенд_форм?</p>
<p>fxposter (01:16:36 20/04/2008)<br />
т.е. мы разделили сам Zend_Form на MVC-составляющие</p>
<p>mihailt (01:16:42 20/04/2008)<br />
аа ну</p>
<p>fxposter (01:17:00 20/04/2008)<br />
&gt; но в принципе получается правилно, программист занят своим делом а именно составлением программы и обработкой данных а остальное его не касается</p>
<p>fxposter (01:17:24 20/04/2008)<br />
программист даже в Zend_Form может заняться моделью и контроллером</p>
<p>fxposter (01:17:35 20/04/2008)<br />
оставив вьюху верстальщику</p>
<p>mihailt (01:17:47 20/04/2008)<br />
именно</p>
<p>fxposter (01:17:50 20/04/2008)<br />
т.е. всё так же, как и с обычными страницами</p>
<p>fxposter (01:18:02 20/04/2008)<br />
только на следующем уровне</p>
<p>fxposter (01:18:07 20/04/2008)<br />
внутри самой страницы</p>
<p>fxposter (01:18:18 20/04/2008)<br />
и так можно описывать любые элементы страницы</p>
<p>fxposter (01:18:26 20/04/2008)<br />
хедер, футер, меню, логотип</p>
<p>fxposter (01:18:31 20/04/2008)<br />
как тебе удобно</p>
<p>fxposter (01:18:37 20/04/2008)<br />
но это в теории</p>
<p>mihailt (01:18:37 20/04/2008)<br />
ну это уже NMVC получается, нет?</p>
<p>fxposter (01:18:46 20/04/2008)<br />
что такое N?</p>
<p>mihailt (01:18:56 20/04/2008)<br />
типа nested</p>
<p>fxposter (01:18:57 20/04/2008)<br />
на практике такое вряд ли будет</p>
<p>fxposter (01:19:01 20/04/2008)</p>
<p>fxposter (01:19:13 20/04/2008)<br />
я такой терминологии не слышал, но так сказать можно</p>
<p>mihailt (01:19:46 20/04/2008)<br />
ну компонетный подход где каздй компонет проектируется по MVC</p>
<p>fxposter (01:20:01 20/04/2008)<br />
честно?</p>
<p>mihailt (01:20:08 20/04/2008)<br />
?</p>
<p>fxposter (01:20:08 20/04/2008)<br />
я с таким подходом не знаком</p>
<p>mihailt (01:20:19 20/04/2008)<br />
гм</p>
<p>fxposter (01:20:25 20/04/2008)<br />
т.е. я представляю, что оно такое</p>
<p>fxposter (01:20:34 20/04/2008)<br />
но никогда в лоб не сталкивался</p>
<p>fxposter (01:20:41 20/04/2008)<br />
почему формы сюда попали (в категорию выделяемых в отдельный обьект), а остальные компоненты - нет</p>
<p>fxposter (01:21:24 20/04/2008)<br />
ну во первых, формы - это более общее понятие, типа Page, Document и т.д., ккоторые уже на MVC как раз разделены. А еще потому, что формы нужно обрабатывать</p>
<p>fxposter (01:21:30 20/04/2008)<br />
на сервере</p>
<p>mihailt (01:22:11 20/04/2008)<br />
кстати про валидацию</p>
<p>mihailt (01:22:37 20/04/2008)<br />
в последнее время не вижу смысла в ней на стороне клиента</p>
<p>fxposter (01:22:42 20/04/2008)</p>
<p>fxposter (01:23:01 20/04/2008)<br />
ну у меня к валидации смешанные чувства</p>
<p>mihailt (01:23:08 20/04/2008)<br />
осjбенно при работе с ajax</p>
<p>fxposter (01:23:09 20/04/2008)<br />
стараюсь делать код валидным</p>
<p>fxposter (01:23:19 20/04/2008)<br />
но в принципе - не гонюсь за этим</p>
<p>mihailt (01:23:29 20/04/2008)<br />
нее</p>
<p>mihailt (01:23:37 20/04/2008)<br />
я про валидацию данных</p>
<p>mihailt (01:23:43 20/04/2008)<br />
из формы</p>
<p>fxposter (01:23:56 20/04/2008)<br />
а</p>
<p>fxposter (01:24:06 20/04/2008)<br />
я её никогда не делал</p>
<p>fxposter (01:24:14 20/04/2008)<br />
смысл вижу явно</p>
<p>fxposter (01:24:20 20/04/2008)<br />
но не делал</p>
<p>mihailt (01:24:34 20/04/2008)<br />
стандартная хрен форма-валидация(клиент)-валидация(сервер)</p>
<p>fxposter (01:24:39 20/04/2008)<br />
смысл - БЫСТРО, реально БЫСТРО сказать пользователю, что он ввел фигню</p>
<p>mihailt (01:25:30 20/04/2008)<br />
при использовани ajax  все равно не вижу</p>
<p>fxposter (01:25:50 20/04/2008)<br />
пройдет пол секунды, пока ты получишь ответ с сервера</p>
<p>fxposter (01:25:56 20/04/2008)<br />
в лучшем случае - меньше</p>
<p>fxposter (01:26:06 20/04/2008)<br />
но не абсолютно быстро</p>
<p>mihailt (01:26:34 20/04/2008)<br />
зато не будет безумных алёртов</p>
<p>fxposter (01:26:42 20/04/2008)<br />
+ нет дополнительных запросов к серваку, но для меня это на данный момент пока что не главный фактоп</p>
<p>fxposter (01:26:45 20/04/2008)<br />
фактор</p>
<p>fxposter (01:27:05 20/04/2008)<br />
&gt; зато не будет безумных алёртов<br />
не обязательно делать алерты</p>
<p>mihailt (01:27:16 20/04/2008)<br />
а если так же апдейтит див то вобще пофиг запрос всё равно есть</p>
<p>fxposter (01:27:27 20/04/2008)<br />
можно сделать сообщения об ошибках неотличимыми при серверной проверке и клиентской</p>
<p>fxposter (01:28:02 20/04/2008)<br />
я тебе могу сказать одно</p>
<p>mihailt (01:28:11 20/04/2008)<br />
типа генерить хтмл во внутрь елемента по ид?</p>
<p>fxposter (01:28:13 20/04/2008)<br />
валидация на клиенте не необходима</p>
<p>fxposter (01:28:15 20/04/2008)<br />
но удобна</p>
<p>fxposter (01:28:21 20/04/2008)<br />
да</p>
<p>fxposter (01:28:25 20/04/2008)<br />
или просто по селектору</p>
<p>fxposter (01:28:29 20/04/2008)<br />
непринципиально</p>
<p>mihailt (01:28:46 20/04/2008)<br />
ну допустим</p>
<p>mihailt (01:28:47 20/04/2008)<br />
но</p>
<p>mihailt (01:28:58 20/04/2008)<br />
получается тоже саме дублирование</p>
<p>fxposter (01:29:05 20/04/2008)<br />
ага</p>
<p>fxposter (01:29:11 20/04/2008)<br />
но на разных уровнях</p>
<p>fxposter (01:29:18 20/04/2008)<br />
это раз</p>
<p>fxposter (01:29:50 20/04/2008)<br />
и два - в теории никто не запрещает делать так, чтобы тот же Zend_From генерировал код с проверками на клиенте</p>
<p>fxposter (01:30:04 20/04/2008)<br />
т.е. описываем мы форму 1 раз</p>
<p>fxposter (01:30:13 20/04/2008)<br />
а проверки оно всё само делает</p>
<p>mihailt (01:30:36 20/04/2008)<br />
хрено получается на мой взгляд, код смешивается</p>
<p>fxposter (01:30:48 20/04/2008)<br />
нет</p>
<p>mihailt (01:30:54 20/04/2008)<br />
в смысле в самом зенд_форм</p>
<p>fxposter (01:30:57 20/04/2008)<br />
нет</p>
<p>fxposter (01:31:04 20/04/2008)<br />
Zend_Form_View</p>
<p>fxposter (01:31:11 20/04/2008)<br />
такого класса, наверное, нет</p>
<p>fxposter (01:31:16 20/04/2008)<br />
но суть понятна</p>
<p>mihailt (01:31:21 20/04/2008)<br />
:D</p>
<p>fxposter (01:31:23 20/04/2008)<br />
ты наследуешься от него</p>
<p>fxposter (01:31:45 20/04/2008)<br />
и в зависимости от валидаторов серверных - делаешь js-проверки</p>
<p>mihailt (01:32:13 20/04/2008)<br />
придумали новый класс в zf&#8217;е осталось только написать и заккомитить</p>
<p>mihailt (01:32:19 20/04/2008)<br />
:D</p>
<p>fxposter (01:32:22 20/04/2008)<br />
не думаю</p>
<p>fxposter (01:32:42 20/04/2008)<br />
всё равно там zend-form разделено на модель и представление</p>
<p>fxposter (01:32:44 20/04/2008)<br />
или нет?</p>
<p>fxposter (01:32:54 20/04/2008)<br />
я не знаю, я zend-form не использовал</p>
<p>fxposter (01:33:05 20/04/2008)<br />
я больше по symfony 1.1 forms сужу</p>
<p>fxposter (01:33:12 20/04/2008)<br />
но суть работы та же</p>
<p>fxposter (01:33:55 20/04/2008)<br />
т.е. можешь считать, что я тут говорил о неком Zend_Form, который в чем-то от настоящего Zend_Form отличается</p>
<p>fxposter (01:34:06 20/04/2008)<br />
но суть не меняет</p>
<p>mihailt (01:34:39 20/04/2008)<br />
setAction(&#8217;/usr/login&#8217;)<br />
-&gt;setMethod(&#8217;post&#8217;);</p>
<p>// Create and configure username element:<br />
$username = $form-&gt;createElement(&#8217;text&#8217;, &#8216;username&#8217;);<br />
$username-&gt;addValidator(&#8217;alnum&#8217;)<br />
-&gt;addValidator(&#8217;regex&#8217;, false, array(&#8217;/^[a-z]+/&#8217;))<br />
-&gt;addValidator(&#8217;stringLength&#8217;, false, array(6, 20))<br />
-&gt;setRequired(true)<br />
-&gt;addFilter(&#8217;StringToLower&#8217;);</p>
<p>// Create and configure password element:<br />
$password = $form-&gt;createElement(&#8217;password&#8217;, &#8216;password&#8217;);<br />
$password-&gt;addValidator(&#8217;StringLength&#8217;, false, array(6))<br />
-&gt;setRequired(true);</p>
<p>// Add elements to form:<br />
$form-&gt;addElement($username)<br />
-&gt;addElement($password)<br />
// use addElement() as a factory to create &#8216;Login&#8217; button:<br />
-&gt;addElement(&#8217;submit&#8217;, &#8216;login&#8217;, array(&#8217;label&#8217; =&gt; &#8216;Login&#8217;));<br />
?&gt;</p>
<p>fxposter (01:34:56 20/04/2008)<br />
мм</p>
<p>fxposter (01:35:08 20/04/2008)<br />
я бы всё это сделал в наследние Zend_Form&#8217;а</p>
<p>fxposter (01:35:30 20/04/2008)<br />
и мог бы потом reuse&#8217;ить такую форму логина во многих местах</p>
<p>mihailt (01:35:58 20/04/2008)<br />
ну это нормально</p>
<p>mihailt (01:36:26 20/04/2008)<br />
я про клентскую часть</p>
<p>mihailt (01:36:40 20/04/2008)<br />
$username-&gt;addValidator(&#8217;alnum&#8217;)</p>
<p>mihailt (01:37:00 20/04/2008)<br />
$username-&gt;addValidator(&#8217;alnum&#8217;,'clientside&#8217;)</p>
<p>mihailt (01:37:11 20/04/2008)<br />
ну или что то типо того</p>
<p>mihailt (01:37:30 20/04/2008)<br />
по моему нормально</p>
<p>fxposter (01:38:22 20/04/2008)<br />
да</p>
<p>fxposter (01:38:36 20/04/2008)<br />
в зенде есть zend_from_decorator</p>
<p>fxposter (01:38:47 20/04/2008)<br />
который отвечает за отрисовку этого всего в html</p>
<p>fxposter (01:38:55 20/04/2008)<br />
судя по всему</p>
<p>mihailt (01:40:00 20/04/2008)<br />
угу принимет 3 аргумента</p>
<p>mihailt (01:40:39 20/04/2008)<br />
содержимое, элемент и параметры</p>
<p>mihailt (01:40:50 20/04/2008)<br />
смотрю на ман</p>
<p>mihailt (01:41:35 20/04/2008)<br />
в принципе его для такого дела тоже можно заюзать</p>
<p>fxposter (01:43:01 20/04/2008)<br />
ну вот он и должен в зависимости от валидаторов серверных, добавленных к элементу писать дополнительный js-код</p>
<p>fxposter (01:44:41 20/04/2008)<br />
отдельные валидаторы для клиента прописывать - имхо, не есть хорошо. хотя - всё может быть.</p>
<p>fxposter (01:44:44 20/04/2008)<br />
ы</p>
<p>mihailt (01:44:51 20/04/2008)<br />
хмм</p>
<p>mihailt (01:45:01 20/04/2008)<br />
во</p>
<p>mihailt (01:45:03 20/04/2008)<br />
Zend_Form_Decorator_Errors</p>
<p>fxposter (01:45:05 20/04/2008)<br />
кстати, еще хорошо бы в валидаторы добавить<br />
Zend_Validator_View</p>
<p>fxposter (01:45:07 20/04/2008)<br />
)))))))))0</p>
<p>mihailt (01:45:12 20/04/2008)<br />
вот он должен</p>
<p>fxposter (01:45:25 20/04/2008)<br />
нет</p>
<p>fxposter (01:45:30 20/04/2008)<br />
он выводит ошибки</p>
<p>fxposter (01:45:33 20/04/2008)<br />
просто выводит</p>
<p>fxposter (01:45:38 20/04/2008)<br />
если они уже найдены</p>
<p>mihailt (01:46:46 20/04/2008)<br />
хмм</p>
<p>mihailt (01:46:49 20/04/2008)<br />
тоже верно</p>
<p>fxposter (01:46:49 20/04/2008)<br />
в общем, тут долго можно размышлять</p>
<p>fxposter (01:47:00 20/04/2008)<br />
но вряд ли это будет сделано в таком виде</p>
<p>mihailt (01:47:13 20/04/2008)<br />
даа ZF можно очень долго копать</p>
<p>fxposter (01:47:23 20/04/2008)</p>
<p>fxposter (01:47:25 20/04/2008)<br />
угу</p>
<p>fxposter (01:47:42 20/04/2008)<br />
ладно, пойду я спать</p>
<p>mihailt (01:47:57 20/04/2008)<br />
даа, чего то я тоже засиделся</p>
<p>mihailt (01:48:03 20/04/2008)<br />
но поговорили хорошо</p>
<p>fxposter (01:48:09 20/04/2008)<br />
ага</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.fxposter.org/2008/04/20/programming-talks/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: blog.fxposter.org @ 2012-02-10 06:15:08 -->
