<?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>Zend Framework по-русски &#187; Руководства</title>
	<atom:link href="http://zend-framework.ru/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://zend-framework.ru</link>
	<description>Статьи, руководства и заметки о фреймворке для PHP - Zend Framework</description>
	<lastBuildDate>Mon, 30 Aug 2010 20:21:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Начало работы с Zend Framework</title>
		<link>http://zend-framework.ru/getting-started/</link>
		<comments>http://zend-framework.ru/getting-started/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 13:53:53 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[MVC-компоненты]]></category>
		<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Формы и обработка входных данных]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[Zend_Controller]]></category>
		<category><![CDATA[Zend_Db]]></category>
		<category><![CDATA[Zend_Db_Table]]></category>
		<category><![CDATA[Zend_Form]]></category>
		<category><![CDATA[Zend_Layout]]></category>
		<category><![CDATA[Zend_View]]></category>
		<category><![CDATA[основы]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=199</guid>
		<description><![CDATA[Автор: Rob Allen, www.akrabat.com Также доступна устаревшая версия руководства, ориентированная на старые версии Zend Framework. Это руководство предназначено для введения в использование Zend Framework для создания простых приложений с использованием БД с использованием парадигмы Model-View-Controller. Оно было переписано для версии фреймворка 1.8 и использует все преимущества скриптов командной строки Zend_Tool и Zend_Application для бутстраппинга. Используются [...]]]></description>
			<content:encoded><![CDATA[<p>Автор: Rob Allen, <a href="http://www.akrabat.com">www.akrabat.com</a><br />
Также доступна <a href="/nachalo-raboty-s-zend-framework/">устаревшая версия руководства</a>, ориентированная на старые версии Zend Framework.</p>
<p>Это руководство предназначено для введения в использование Zend Framework для создания простых приложений с использованием БД с использованием парадигмы <a href="http://ru.wikipedia.org/wiki/MVC">Model-View-Controller</a>. Оно было переписано для версии фреймворка 1.8 и использует все преимущества скриптов командной строки Zend_Tool и Zend_Application для бутстраппинга. Используются другие компоненты, включая Zend_Controller, Zend_View, Zend_Db_Table и Zend_Form.<br />
(...)<br/>Продолжить чтение - <a href="http://zend-framework.ru/getting-started/">Начало работы с Zend Framework</a> (2,617 words)</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/getting-started/#comments">135 comments</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/mod_rewrite/" rel="tag">mod_rewrite</a>, <a href="http://zend-framework.ru/tag/zend_controller/" rel="tag">Zend_Controller</a>, <a href="http://zend-framework.ru/tag/zend_db/" rel="tag">Zend_Db</a>, <a href="http://zend-framework.ru/tag/zend_db_table/" rel="tag">Zend_Db_Table</a>, <a href="http://zend-framework.ru/tag/zend_form/" rel="tag">Zend_Form</a>, <a href="http://zend-framework.ru/tag/zend_layout/" rel="tag">Zend_Layout</a>, <a href="http://zend-framework.ru/tag/zend_view/" rel="tag">Zend_View</a>, <a href="http://zend-framework.ru/tag/osnovy/" rel="tag">основы</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/getting-started/feed/</wfw:commentRss>
		<slash:comments>135</slash:comments>
		</item>
		<item>
		<title>Создание API сервисов при помощи Zend Framework</title>
		<link>http://zend-framework.ru/service-api/</link>
		<comments>http://zend-framework.ru/service-api/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 05:10:38 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Прочее]]></category>
		<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Ссылки]]></category>
		<category><![CDATA[AMF]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[JSON-RPC]]></category>
		<category><![CDATA[service API]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[XML-RPC]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=182</guid>
		<description><![CDATA[Matthew Weier O&#8217;Phinney опубликовал краткое руководство по созданию SOAP, XML-RPC, JSON-RPC или AMF API на базе Zend Framework. Я знал, что через ZF это сделать просто, но, оказалось, даже проще, чем я думал. Например, вот так выглядит создание XML-RPC-сервера: 123$server = new Zend_XmlRpc_Server&#40;&#41;; $server-&#62;setClass&#40;'My_Awesome_Api'&#41;; echo $server-&#62;handle&#40;&#41;; Также не следует использовать для этих целей полноценный MVC [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weierophinney.net/matthew/">Matthew Weier O&#8217;Phinney</a> опубликовал <a href="http://weierophinney.net/matthew/archives/227-Exposing-Service-APIs-via-Zend-Framework.html">краткое руководство по созданию SOAP, XML-RPC, JSON-RPC или AMF API на базе Zend Framework</a>.<br />
Я знал, что через ZF это сделать просто, но, оказалось, даже проще, чем я думал. Например, вот так выглядит создание XML-RPC-сервера:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="re0">$server</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_XmlRpc_Server<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$server</span><span class="sy0">-&gt;</span><span class="me1">setClass</span><span class="br0">&#40;</span><span class="st_h">'My_Awesome_Api'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$server</span><span class="sy0">-&gt;</span><span class="me1">handle</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>Также не следует использовать для этих целей полноценный MVC — просто незачем проходить полный цикл диспатчеризации, если можно заменить его куда более производительным сервис-сервером:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">class</span> XmlRpc_Bootstrap <span class="kw2">extends</span> Bootstrap<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$server</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_XmlRpc_Server<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$server</span><span class="sy0">-&gt;</span><span class="me1">setClass</span><span class="br0">&#40;</span><span class="st_h">'My_Awesome_Api'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$server</span><span class="sy0">-&gt;</span><span class="me1">handle</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">$app</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Application<span class="br0">&#40;</span><br />
&nbsp; &nbsp; APPLICATION_ENV<span class="sy0">,</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'bootstrap'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'XmlRpc_Bootstrap'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'path'</span> &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'path/to/Bootstrap.php'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'config'</span> <span class="sy0">=&gt;</span> APPLICATION_PATH <span class="sy0">.</span> <span class="st_h">'/configs/application.ini'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span><br />
<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$app</span><span class="sy0">-&gt;</span><span class="me1">bootstrap</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="sy0">-&gt;</span><span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>Подробности читайте в <a href="http://weierophinney.net/matthew/archives/227-Exposing-Service-APIs-via-Zend-Framework.html">оригинале статьи</a>.</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/service-api/#comments">4 comments</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/amf/" rel="tag">AMF</a>, <a href="http://zend-framework.ru/tag/bootstrap/" rel="tag">bootstrap</a>, <a href="http://zend-framework.ru/tag/json-rpc/" rel="tag">JSON-RPC</a>, <a href="http://zend-framework.ru/tag/service-api/" rel="tag">service API</a>, <a href="http://zend-framework.ru/tag/soap/" rel="tag">SOAP</a>, <a href="http://zend-framework.ru/tag/xml-rpc/" rel="tag">XML-RPC</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/service-api/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Google и Zend_OpenID</title>
		<link>http://zend-framework.ru/google-zend_openid/</link>
		<comments>http://zend-framework.ru/google-zend_openid/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 19:32:24 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Авторизация и аутентификация]]></category>
		<category><![CDATA[Руководства]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=179</guid>
		<description><![CDATA[Ни для кого не секрет, что Zend_OpenID не всегда работает так, как хотелось бы. Сегодня я столкнулся с тем, что этот компонент не принимал ответ от openID-сервера google, выдавая ошибку &#8220;Discovery failed&#8221;. После изучения исходных кодов я выяснил, что необходимый для корректной валидации код просто отсутствует в компоненте. Пришлось воспользоваться грязным хаком (источник): В метод [...]]]></description>
			<content:encoded><![CDATA[<p>Ни для кого не секрет, что Zend_OpenID не всегда работает так, как хотелось бы.<br />
Сегодня я столкнулся с тем, что этот компонент не принимал ответ от openID-сервера google, выдавая ошибку &#8220;Discovery failed&#8221;. После изучения исходных кодов я выяснил, что необходимый для корректной валидации код просто отсутствует в компоненте. Пришлось воспользоваться грязным хаком (<a href="http://framework.zend.com/issues/browse/ZF-6905">источник</a>):</p>
<ol>
<li>
В метод Zend_OpenId_Consumer::_discovery(), в серию условий if preg_match (начало около строки 740), надо добавить следующий блок:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st_h">'/&lt;URI&gt;([^&lt;]+)&lt;\/URI&gt;/i'</span><span class="sy0">,</span> <span class="re0">$response</span><span class="sy0">,</span> <span class="re0">$r</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$version</span> <span class="sy0">=</span> <span class="nu19">2.0</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$server</span> <span class="sy0">=</span> <span class="re0">$r</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
</li>
<li>
Класс тот же, метод _checkId(). В блок if ($version <= 2.0), в if ($this->_session !== null) надо добавить:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$server</span> <span class="sy0">==</span> <span class="st_h">'https://www.google.com/accounts/o8/ud'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span>_session<span class="sy0">-&gt;</span><span class="me1">identity</span> <span class="sy0">=</span> <span class="st_h">'http://specs.openid.net/auth/2.0/identifier_select'</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span>_session<span class="sy0">-&gt;</span><span class="me1">claimed_id</span> <span class="sy0">=</span> <span class="st_h">'http://specs.openid.net/auth/2.0/identifier_select'</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
</li>
<li>
Там же, следующая ветка &#8211; else if (defined(&#8216;SID&#8217;)):</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$server</span> <span class="sy0">==</span> <span class="st_h">'https://www.google.com/accounts/o8/ud'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$_SESSION</span><span class="br0">&#91;</span><span class="st_h">'zend_openid'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'identity'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'http://specs.openid.net/auth/2.0/identifier_select'</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$_SESSION</span><span class="br0">&#91;</span><span class="st_h">'zend_openid'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'claimed_id'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'http://specs.openid.net/auth/2.0/identifier_select'</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
</li>
<li>
Там же, вне if/else if/else ветки, но внутри $version <= 2.0:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$server</span> <span class="sy0">==</span> <span class="st_h">'https://www.google.com/accounts/o8/ud'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$params</span><span class="br0">&#91;</span><span class="st_h">'openid.identity'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'http://specs.openid.net/auth/2.0/identifier_select'</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$params</span><span class="br0">&#91;</span><span class="st_h">'openid.claimed_id'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st_h">'http://specs.openid.net/auth/2.0/identifier_select'</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
</li>
</ol>
<p>Конечно, это некрасивое решение, но оно приемлемо до тех пор, пока этот баг не будет закрыт.</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/google-zend_openid/#comments">3 comments</a>
<br/>
Post tags: <br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/google-zend_openid/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Передача параметров запроса в действия контроллеров</title>
		<link>http://zend-framework.ru/mapping-request-parameters/</link>
		<comments>http://zend-framework.ru/mapping-request-parameters/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 19:47:24 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[MVC-компоненты]]></category>
		<category><![CDATA[Библиотеки для ZF]]></category>
		<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Zend_Controller]]></category>
		<category><![CDATA[Zend_Controller_Router]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=176</guid>
		<description><![CDATA[Недавно на сайте http://fbdevzone.com/ был рассмотрен удобный способ передачи URL-параметров в действия. Обычно для этой цели используются методы $this->_getParam() и $this->getRequest()->getParam() в классах контроллера. Это довольно удобный способ, однако он не идеален — прописывать это из метода в метод не очень удобно. Предложенный способ заключается в том, что параметры передаются в действия в виде аргументов [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно на сайте <a href="http://fbdevzone.com/">http://fbdevzone.com/</a> был рассмотрен <a href="http://fbdevzone.com/2009/10/request-parameter-mapping/">удобный способ передачи URL-параметров в действия</a>.<br />
Обычно для этой цели используются методы $this->_getParam() и $this->getRequest()->getParam() в классах контроллера. Это довольно удобный способ, однако он не идеален — прописывать это из метода в метод не очень удобно.<br />
Предложенный способ заключается в том, что параметры передаются в действия в виде аргументов метода:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co4">/**<br />
&nbsp;* index/info/<br />
&nbsp;* index/info/tags/one/tags/two<br />
&nbsp;* index/info/msg/msg-only<br />
&nbsp;* index/info/date/2009-10-03<br />
&nbsp;* index/info/msg/RandomOrder/date/2009-10-03<br />
&nbsp;*<br />
&nbsp;* @param array $tags<br />
&nbsp;* @param Zend_Date $date<br />
&nbsp;* @param string $msg<br />
&nbsp;*/</span><br />
<span class="kw2">public</span> <span class="kw2">function</span> infoAction<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a> <span class="re0">$tags</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">,</span> Zend_Date <span class="re0">$date</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">,</span> <span class="re0">$msg</span> <span class="sy0">=</span> <span class="st_h">'hello'</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; Zend_Debug<span class="sy0">::</span><span class="me2">dump</span><span class="br0">&#40;</span><span class="re0">$tags</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/is_null"><span class="kw3">is_null</span></a><span class="br0">&#40;</span><span class="re0">$date</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$date</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span>Zend_Date<span class="sy0">::</span><span class="me2">DATETIME_FULL</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;no date passed<span class="es1">\n</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; Zend_Debug<span class="sy0">::</span><span class="me2">dump</span><span class="br0">&#40;</span><span class="re0">$msg</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>При помощи Zend_Reflection производится парсинг phpdoc-комментариев, присваивая переменным соответствующие типы.<br />
Подробнее читайте <a href="http://fbdevzone.com/2009/10/request-parameter-mapping/">в блоге автора</a>. Там же вы найдёте исходный код класса.</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/mapping-request-parameters/#comments">6 comments</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/zend_controller/" rel="tag">Zend_Controller</a>, <a href="http://zend-framework.ru/tag/zend_controller_router/" rel="tag">Zend_Controller_Router</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/mapping-request-parameters/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Склонение существительных во множественном числе (Plural)</title>
		<link>http://zend-framework.ru/view-helper-plural/</link>
		<comments>http://zend-framework.ru/view-helper-plural/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 12:07:50 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Прочее]]></category>
		<category><![CDATA[Руководства]]></category>
		<category><![CDATA[plural]]></category>
		<category><![CDATA[Zend_View]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=169</guid>
		<description><![CDATA[Здравствуйте. Думаю, многие из вас сталкивались с проблемой склонения существительных в зависимости от какого-либо числа. Например, &#8220;15 дней&#8221;. А если будет 21, выводить &#8220;21 дней&#8221;? Для решения этой проблемы написано множество функций, но я не встречал реализации в виде помощника Zend_View. Итак, встречайте: App_View_Helper_Plural. 123456789101112131415class Helper_View_Plural extends Zend_View_Helper_Abstract &#123; &#160; &#160; public function plural&#40;$n, $form1, [...]]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте.<br />
Думаю, многие из вас сталкивались с проблемой склонения существительных в зависимости от какого-либо числа. Например, &#8220;15 дней&#8221;. А если будет 21, выводить &#8220;21 дней&#8221;? Для решения этой проблемы написано <a href="http://translate.sourceforge.net/wiki/l10n/pluralforms#r">множество функций</a>, но я не встречал реализации в виде помощника Zend_View. Итак, встречайте: App_View_Helper_Plural.</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">class</span> Helper_View_Plural <span class="kw2">extends</span> Zend_View_Helper_Abstract<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> plural<span class="br0">&#40;</span><span class="re0">$n</span><span class="sy0">,</span> <span class="re0">$form1</span><span class="sy0">,</span> <span class="re0">$form2</span><span class="sy0">,</span> <span class="re0">$form3</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$plural</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re0">$n</span> <span class="sy0">%</span> <span class="nu0">10</span> <span class="sy0">==</span> <span class="nu0">1</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$n</span> <span class="sy0">%</span> <span class="nu0">100</span> <span class="sy0">!=</span> <span class="nu0">11</span> ? <span class="nu0">0</span> <span class="sy0">:</span> <span class="br0">&#40;</span><span class="re0">$n</span> <span class="sy0">%</span> <span class="nu0">10</span> <span class="sy0">&gt;=</span> <span class="nu0">2</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$n</span> <span class="sy0">%</span> <span class="nu0">10</span> <span class="sy0">&lt;=</span> <span class="nu0">4</span> <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span><span class="re0">$n</span> <span class="sy0">%</span> <span class="nu0">100</span> <span class="sy0">&lt;</span> <span class="nu0">10</span> or <span class="re0">$n</span> <span class="sy0">%</span> <span class="nu0">100</span> <span class="sy0">&gt;=</span> <span class="nu0">20</span><span class="br0">&#41;</span> ? <span class="nu0">1</span> <span class="sy0">:</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span><span class="re0">$plural</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">0</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$form1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">1</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$form2</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">2</span><span class="sy0">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$form3</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>Использование (в шаблоне):</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st_h">'1 '</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">plural</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="st_h">'день'</span><span class="sy0">,</span> <span class="st_h">'дня'</span><span class="sy0">,</span> <span class="st_h">'дней'</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'&lt;br&gt;'</span><span class="sy0">;</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st_h">'4 '</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">plural</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="sy0">,</span> <span class="st_h">'день'</span><span class="sy0">,</span> <span class="st_h">'дня'</span><span class="sy0">,</span> <span class="st_h">'дней'</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">'&lt;br&gt;'</span><span class="sy0">;</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st_h">'25 '</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">plural</span><span class="br0">&#40;</span><span class="nu0">25</span><span class="sy0">,</span> <span class="st_h">'день'</span><span class="sy0">,</span> <span class="st_h">'дня'</span><span class="sy0">,</span> <span class="st_h">'дней'</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>Вывод:</p>
<blockquote><p>
1 день<br />
4 дня<br />
25 дней
</p></blockquote>
<p>Надеюсь, этого поможет вам сделать ваши проекты более удобными для пользователей.<br />
Всего доброго.</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/view-helper-plural/#comments">6 comments</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/plural/" rel="tag">plural</a>, <a href="http://zend-framework.ru/tag/zend_view/" rel="tag">Zend_View</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/view-helper-plural/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Разработка всеобъемлющего автозагрузчика</title>
		<link>http://zend-framework.ru/developing-a-comprehensive-autoloader/</link>
		<comments>http://zend-framework.ru/developing-a-comprehensive-autoloader/#comments</comments>
		<pubDate>Fri, 08 May 2009 10:28:24 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Прочее]]></category>
		<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Zend_Application]]></category>
		<category><![CDATA[Zend_Loader]]></category>
		<category><![CDATA[Zend_Tool]]></category>
		<category><![CDATA[основы]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=152</guid>
		<description><![CDATA[Ниже опубликован перевод статьи Matthew Weier O&#8217;Phinney Developing a Comprehensive Autoloader. В этой статье я буду рассуждать о развитии и нововведениях Zend_Loader_Autoloader и смежного функционала. Тем не менее, основная цель статьи — показать различные проектировочные решения, которые ведут к созданию всеобъемлющего автозагрузчика для ваших PHP-приложений. Автозагрузка, внешне тривиальная задача, имеет много тонкостей, которые часто упускают. [...]]]></description>
			<content:encoded><![CDATA[<p><em>Ниже опубликован перевод статьи <a href="http://weierophinney.net/matthew/">Matthew Weier O&#8217;Phinney</a> <a href="http://devzone.zend.com/article/4525">Developing a Comprehensive Autoloader</a>.</em></p>
<p>В этой статье я буду рассуждать о развитии и нововведениях Zend_Loader_Autoloader и смежного функционала. Тем не менее, основная цель статьи — показать различные проектировочные решения, которые ведут к созданию всеобъемлющего автозагрузчика для ваших PHP-приложений. Автозагрузка, внешне тривиальная задача, имеет много тонкостей, которые часто упускают.<br />
(...)<br/>Продолжить чтение - <a href="http://zend-framework.ru/developing-a-comprehensive-autoloader/">Разработка всеобъемлющего автозагрузчика</a> (1,357 words)</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/developing-a-comprehensive-autoloader/#comments">8 comments</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/zend_application/" rel="tag">Zend_Application</a>, <a href="http://zend-framework.ru/tag/zend_loader/" rel="tag">Zend_Loader</a>, <a href="http://zend-framework.ru/tag/zend_tool/" rel="tag">Zend_Tool</a>, <a href="http://zend-framework.ru/tag/osnovy/" rel="tag">основы</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/developing-a-comprehensive-autoloader/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Обработка данных с помощью Zend_Filter_Input</title>
		<link>http://zend-framework.ru/zend_filter_input-validation/</link>
		<comments>http://zend-framework.ru/zend_filter_input-validation/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 08:00:32 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Формы и обработка входных данных]]></category>
		<category><![CDATA[Zend_Filter_Input]]></category>
		<category><![CDATA[Zend_Validate]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=134</guid>
		<description><![CDATA[Zend_Filter_Input совершенно незаслуженно был обойдён вниманием со стороны разработчиков. На практике он способен во многих ситуациях заменить уже ставший привычным Zend_Form. (...)Продолжить чтение - Обработка данных с помощью Zend_Filter_Input (394 words) 17 comments Post tags: Zend_Filter_Input, Zend_Validate]]></description>
			<content:encoded><![CDATA[<p>Zend_Filter_Input совершенно незаслуженно был обойдён вниманием со стороны разработчиков. На практике он способен во многих ситуациях заменить уже ставший привычным Zend_Form.<br />
(...)<br/>Продолжить чтение - <a href="http://zend-framework.ru/zend_filter_input-validation/">Обработка данных с помощью Zend_Filter_Input</a> (394 words)</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/zend_filter_input-validation/#comments">17 comments</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/zend_filter_input/" rel="tag">Zend_Filter_Input</a>, <a href="http://zend-framework.ru/tag/zend_validate/" rel="tag">Zend_Validate</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/zend_filter_input-validation/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Использование Memcached с Zend Framework</title>
		<link>http://zend-framework.ru/using-memcached-with-zf/</link>
		<comments>http://zend-framework.ru/using-memcached-with-zf/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 06:55:04 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Прочее]]></category>
		<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Ссылки]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[Zend_Cache]]></category>
		<category><![CDATA[кэширование]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=124</guid>
		<description><![CDATA[В A.J. Brown&#8217;s blog было опубликовано руководство по использованию Memcached при помощи Zend_Cache. Как оказалось, всё просто и удобно. Рекомендую к прочтению. One comment Post tags: memcached, Zend_Cache, кэширование]]></description>
			<content:encoded><![CDATA[<p>В <a href="http://ajbrown.org/blog/">A.J. Brown&#8217;s blog</a> было опубликовано <a href="http://ajbrown.org/blog/2008/12/24/memcached-in-php-made-easy-with-zend-framework.html">руководство по использованию Memcached при помощи Zend_Cache</a>. Как оказалось, всё просто и удобно. Рекомендую к прочтению.</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/using-memcached-with-zf/#comments">One comment</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/memcached/" rel="tag">memcached</a>, <a href="http://zend-framework.ru/tag/zend_cache/" rel="tag">Zend_Cache</a>, <a href="http://zend-framework.ru/tag/keshirovanie/" rel="tag">кэширование</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/using-memcached-with-zf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Стилизация Zend_Form</title>
		<link>http://zend-framework.ru/zend_form-styling/</link>
		<comments>http://zend-framework.ru/zend_form-styling/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 06:33:35 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Ссылки]]></category>
		<category><![CDATA[Формы и обработка входных данных]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Zend_Form]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=121</guid>
		<description><![CDATA[Как известно, по умолчанию Zend_Form генерирует форму в виде списка определений. При этом многих не устраивает внешний вид списка &#8211; более привычным является оформление формы в таблицу. Можно решить эту проблему с помощью декораторов, но это решение является не самым лучшим. В блоге Robert Basic опубликовано руководство под названием Styling the default Zend_Form layout, в [...]]]></description>
			<content:encoded><![CDATA[<p>Как известно, по умолчанию Zend_Form генерирует форму в виде <a href="http://w3schools.com/tags/tag_dl.asp">списка определений</a>. При этом многих не устраивает внешний вид списка &#8211; более привычным является оформление формы в таблицу. Можно решить эту проблему с помощью декораторов, но это решение является не самым лучшим.<br />
В <a href="http://robertbasic.com/blog/">блоге Robert Basic</a> опубликовано руководство под названием <a href="http://robertbasic.com/blog/styling-the-default-zend_form-layout/">Styling the default Zend_Form layout</a>, в котором рассказано, как с помощью CSS изменить внешний вид формы, чтобы она выглядела, как таблица. Именно так должна решаться проблема с внешним видом форм, а разметка форм должна оставаться списком определений (dl).</p>
<hr />
<p><small>
<a href="http://zend-framework.ru/zend_form-styling/#comments">2 comments</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/css/" rel="tag">CSS</a>, <a href="http://zend-framework.ru/tag/zend_form/" rel="tag">Zend_Form</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/zend_form-styling/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Использование Zend_Captcha</title>
		<link>http://zend-framework.ru/zend_captcha/</link>
		<comments>http://zend-framework.ru/zend_captcha/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 08:02:41 +0000</pubDate>
		<dc:creator>Сергей Митрошин</dc:creator>
				<category><![CDATA[Руководства]]></category>
		<category><![CDATA[Формы и обработка входных данных]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[Zend_Captcha]]></category>
		<category><![CDATA[Zend_Captcha_Image]]></category>
		<category><![CDATA[Zend_Form]]></category>
		<category><![CDATA[Zend_Form_Element_Captcha]]></category>

		<guid isPermaLink="false">http://zend-framework.ru/?p=117</guid>
		<description><![CDATA[Zend_Captcha &#8211; компонент Zend Framework, позволяющий быстро и удобно использовать CAPTCHA. Если вы используете Zend_Form, то вам понадобится статья Zend_Captcha example, автор Robert Basic. В случае, если вы хотите использовать Zend_Captcha без связки с Zend_Form, вам будет полезна статья Using Zend_Captcha_Image, опубликованная в блоге Sankho Malik No comment Post tags: captcha, Zend_Captcha, Zend_Captcha_Image, Zend_Form, Zend_Form_Element_Captcha]]></description>
			<content:encoded><![CDATA[<p>Zend_Captcha &#8211; компонент Zend Framework, позволяющий быстро и удобно использовать <a href="http://ru.wikipedia.org/wiki/CAPTCHA">CAPTCHA</a>.<br />
Если вы используете Zend_Form, то вам понадобится статья <a href="http://robertbasic.com/blog/a-zend-captcha-example/">Zend_Captcha example</a>, автор <a href="http://robertbasic.com/">Robert Basic</a>.<br />
В случае, если вы хотите использовать Zend_Captcha без связки с Zend_Form, вам будет полезна статья <a href="http://blog.sankhomallik.com/2008/12/17/tutorial-using-zend_captcha_image/">Using Zend_Captcha_Image</a>, опубликованная в блоге <a href="http://blog.sankhomallik.com/">Sankho Malik</a></p>
<hr />
<p><small>
<a href="http://zend-framework.ru/zend_captcha/#comments">No comment</a>
<br/>
Post tags: <a href="http://zend-framework.ru/tag/captcha/" rel="tag">captcha</a>, <a href="http://zend-framework.ru/tag/zend_captcha/" rel="tag">Zend_Captcha</a>, <a href="http://zend-framework.ru/tag/zend_captcha_image/" rel="tag">Zend_Captcha_Image</a>, <a href="http://zend-framework.ru/tag/zend_form/" rel="tag">Zend_Form</a>, <a href="http://zend-framework.ru/tag/zend_form_element_captcha/" rel="tag">Zend_Form_Element_Captcha</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://zend-framework.ru/zend_captcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
