<?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>Developer Blog &#187; Symfony</title>
	<atom:link href="http://451f.com.ua/tag/symfony/feed" rel="self" type="application/rss+xml" />
	<link>http://451f.com.ua</link>
	<description>developer blog - 451 degrees Fahrenheit</description>
	<lastBuildDate>Sun, 04 Jul 2010 21:22:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Symfony 2 online – ожидал большего</title>
		<link>http://451f.com.ua/symfony-2-online-must-be-best/329</link>
		<comments>http://451f.com.ua/symfony-2-online-must-be-best/329#comments</comments>
		<pubDate>Tue, 22 Jun 2010 15:26:42 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=329</guid>
		<description><![CDATA[Прошла Symfony 2 online &#8211; но честно говоря особых впечатлений не ощутил, точнее ожидал более интересной инфы по самой Symfony 2, но в общем-то было рассказано практически то же что и было на февральской Symfony live conf. Но стоит отметить интересный доклад по Propel 1.5, который просто поражает своим ростом функциональности и удобства за столь [...]]]></description>
			<content:encoded><![CDATA[<p>Прошла Symfony 2 online &#8211; но честно говоря особых впечатлений не ощутил, точнее ожидал более интересной инфы по самой Symfony 2, но в общем-то было рассказано практически то же что и было на февральской Symfony live conf.</p>
<p>Но стоит отметить интересный доклад по Propel 1.5, который просто поражает своим ростом функциональности и удобства за столь короткий срок после выхода версии 1.4 и по новому form framework, который обещает построение форм любой сложности без бубна.</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/symfony-2-online-must-be-best/329/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Используем Namespaces в Propel 1.5</title>
		<link>http://451f.com.ua/propel-namespaces-php/324</link>
		<comments>http://451f.com.ua/propel-namespaces-php/324#comments</comments>
		<pubDate>Tue, 15 Jun 2010 13:03:16 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[propel]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=324</guid>
		<description><![CDATA[Propel 1.5 не перестает радовать темпами развития и внедрением нового функционала, буквально несколько недель назад Francois Zaninotto (лидер  проекта Propel) опубликовал новую возможность по редактированию вложенных форм с использованием mergeRelation и embedRelation и на днях возможность использовать Namespaces при генерации моделей. Propel 1.5 позволяет использовать Namespaces в файлах описывающих вашу модель если вы используете в [...]]]></description>
			<content:encoded><![CDATA[<p>Propel 1.5 не перестает радовать темпами развития и внедрением нового функционала, буквально несколько недель назад <a href="http://posterous.com/people/KQvOiGXGut">Francois Zaninotto</a> (лидер  проекта Propel) опубликовал новую возможность по редактированию <a href="http://tigor.com.ua/blog/2010/06/02/sfpropel15plugin-embed-relation-forms-in-one-line/">вложенных форм с использованием mergeRelation и embedRelation</a> и на днях возможность использовать <a href="http://php.net/manual/en/language.namespaces.php">Namespaces</a> при генерации моделей.</p>
<p>Propel 1.5 позволяет использовать Namespaces в файлах описывающих вашу модель если вы используете в работе php версии 5.3</p>
<p>Добавить использование моделей очень просто:<br />
<code lang="xml"> &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;<br />
&lt;database name="bookstore" namespace="Bookstore" defaultIdMethod="native"&gt;<br />
&lt;table name="book"&gt;<br />
&lt;!-- --&gt;<br />
&lt;/table&gt;<br />
&lt;table name="author"&gt;<br />
&lt;!-- --&gt;<br />
&lt;/table&gt;<br />
&lt;/database&gt;</code><br />
А в классе модели:<br />
<code lang="php"> &lt;?php<br />
// use fully qualified name<br />
$book = new \Bookstore\Book();<br />
// or use an alias<br />
use Bookstore\Book;<br />
$book = new Book();<br />
// remember to use the \ namespace for core Propel classes in this case<br />
$con = \Propel::getConnection();<br />
$book-&gt;save($con);</code><br />
Более подробнее можно прочесть в блоге <a href="http://propel.posterous.com/propel-php-53-and-namespaces-they-love-each-o">Francois Zaninotto</a></p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/propel-namespaces-php/324/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Друзья, мы запустили www.symfonycamp.org.ua &#8211; милости просим</title>
		<link>http://451f.com.ua/%d0%b4%d1%80%d1%83%d0%b7%d1%8c%d1%8f-%d0%bc%d1%8b-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d0%bb%d0%b8-www-symfonycamp-org-ua-%d0%bc%d0%b8%d0%bb%d0%be%d1%81%d1%82%d0%b8-%d0%bf%d1%80%d0%be%d1%81/321</link>
		<comments>http://451f.com.ua/%d0%b4%d1%80%d1%83%d0%b7%d1%8c%d1%8f-%d0%bc%d1%8b-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d0%bb%d0%b8-www-symfonycamp-org-ua-%d0%bc%d0%b8%d0%bb%d0%be%d1%81%d1%82%d0%b8-%d0%bf%d1%80%d0%be%d1%81/321#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:27:28 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[camp]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=321</guid>
		<description><![CDATA[Все желающие посетить и непосредственно поучаствовать в SYMFONY CAMP UA 2010 просим пройти регистрацию на официальном сайте конференции http://symfonycamp.org.ua так же набирается help team для конференции &#8211; это те люди, которые будут помогать в закулисных делах конференции, если у вас есть желание помочь при регистрации в поле дополнительная информация укажите &#8220;хочу в help team&#8221;]]></description>
			<content:encoded><![CDATA[<p>Все желающие посетить и непосредственно поучаствовать в <strong>SYMFONY CAMP UA 2010</strong> просим пройти регистрацию на официальном сайте конференции <a href="http://symfonycamp.org.ua/">http://symfonycamp.org.ua</a></p>
<p><a title="Symfony Camp UA 2010" href="http://symfonycamp.org.ua/"><img class="aligncenter size-full wp-image-97" src="http://symfony.org.ua/wp-content/2010/04/banner.png" alt="" width="400" height="98" /></a></p>
<p>так же набирается help team для конференции &#8211; это те люди, которые будут помогать в закулисных делах конференции, если у вас есть желание помочь при регистрации в поле дополнительная информация укажите &#8220;хочу в help team&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/%d0%b4%d1%80%d1%83%d0%b7%d1%8c%d1%8f-%d0%bc%d1%8b-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d0%bb%d0%b8-www-symfonycamp-org-ua-%d0%bc%d0%b8%d0%bb%d0%be%d1%81%d1%82%d0%b8-%d0%bf%d1%80%d0%be%d1%81/321/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Серверная архитектура Dailymotion.com</title>
		<link>http://451f.com.ua/architecture-dailymotion/312</link>
		<comments>http://451f.com.ua/architecture-dailymotion/312#comments</comments>
		<pubDate>Wed, 20 May 2009 12:59:24 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[dailymotion]]></category>
		<category><![CDATA[sensil lab]]></category>
		<category><![CDATA[архитектура]]></category>
		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=312</guid>
		<description><![CDATA[Sensio Lab расказала немного о архитектуре видео хостинга Dailymotion 50 web серверов, обрабатывают по 5000 запросов в секунду 17 серверов баз данных 30 memchache серверов, общий объем памяти 210 Гб 1.2 petabytes на хранение данных Этот список не влючает сервера по кодированию видео и обработке поисковых запросов. В общей сложности сайт обслуживают 450 шт. серверов.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dailymotion.com" target="_blank"><img class="size-medium wp-image-315 aligncenter" title="4732_dailymotion" src="http://451f.com.ua/img/2009/05/4732_dailymotion-300x130.jpg" alt="4732_dailymotion" width="300" height="130" /></a><br />
<a href="http://www.sensio-labs.com/" target="_blank">Sensio Lab</a> расказала немного о архитектуре видео хостинга <a href="http://www.dailymotion.com" target="_blank">Dailymotion<br />
</a></p>
<ul>
<li>50 web серверов, обрабатывают по 5000 запросов в секунду</li>
<li>17 серверов баз данных</li>
<li>30 memchache серверов, общий объем памяти 210 Гб</li>
<li>1.2 petabytes на хранение данных</li>
</ul>
<p>Этот список не влючает сервера по кодированию видео и обработке поисковых запросов.</p>
<p>В общей сложности сайт обслуживают 450 шт. серверов.</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/architecture-dailymotion/312/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Symfony UA CAMP &#8211; небольшой отчет!</title>
		<link>http://451f.com.ua/symfony-ua-camp-report/306</link>
		<comments>http://451f.com.ua/symfony-ua-camp-report/306#comments</comments>
		<pubDate>Tue, 19 May 2009 13:25:01 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[publication]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[uacamp]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=306</guid>
		<description><![CDATA[Совсем не давно завершился Symfony UA CAMP, организованный украинским сообществом symfony.org.ua Изначально мы планировали до 50 человек, но приехало больше 80, это нас очень порадовало.  Обрадовали нас и орендадатели зала выделили в честь такого большого количества людей и зал побольше, за что им отдельное спасибо! Мои доклады на конференции: Routing System In Symfony 1.2 View [...]]]></description>
			<content:encoded><![CDATA[<p>Совсем не давно завершился Symfony UA CAMP, организованный украинским сообществом <a href="http://symfony.org.ua" target="_blank">symfony.org.ua</a></p>
<p>Изначально мы планировали до 50 человек, но приехало больше 80, это нас очень порадовало.  Обрадовали нас и орендадатели зала выделили в честь такого большого количества людей и зал побольше, за что им отдельное спасибо!</p>
<p>Мои доклады на конференции:</p>
<div id="__ss_1451507" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Routing System In Symfony 1.2" href="http://www.slideshare.net/redpilot/routing-system-in-symfony-12-1451507?type=powerpoint">Routing System In Symfony 1.2</a><object width="425" height="355" data="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=routingsysteminsymfony1-2-090518053950-phpapp01&amp;stripped_title=routing-system-in-symfony-12-1451507" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=routingsysteminsymfony1-2-090518053950-phpapp01&amp;stripped_title=routing-system-in-symfony-12-1451507" /><param name="allowfullscreen" value="true" /></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/redpilot">redpilot</a>.</div>
</div>
<p><span id="more-306"></span></p>
<div id="__ss_1451257" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Symfony Project Publication" href="http://www.slideshare.net/redpilot/symfony-project-publication?type=presentation">Symfony Project Publication</a><object width="425" height="355" data="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=symfonyprojectpublication-090518043446-phpapp02&amp;stripped_title=symfony-project-publication" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=symfonyprojectpublication-090518043446-phpapp02&amp;stripped_title=symfony-project-publication" /><param name="allowfullscreen" value="true" /></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/redpilot">redpilot</a>.</div>
</div>
<p>Все доклады можно посмотреть на сайте нашего комъюнити <a href="http://symfony.org.ua" target="_blank">symfony.org.ua</a>, а так же на <a href="http://www.slideshare.net/tag/uasymfonycamp">http://www.slideshare.net/tag/uasymfonycamp</a></p>
<p>По секрету скажу, что возможно уже следующий камп мы проведем в сентябре.</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/symfony-ua-camp-report/306/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>UA SymfonyCamp в Киеве 16го мая</title>
		<link>http://451f.com.ua/symfony-camp-v-kieve-16go-maya/303</link>
		<comments>http://451f.com.ua/symfony-camp-v-kieve-16go-maya/303#comments</comments>
		<pubDate>Tue, 31 Mar 2009 08:23:44 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[symfony camp]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=303</guid>
		<description><![CDATA[Итак, 16 мая мы планируем провести конференцию по фреймворку Symfony. Мероприятие будет проходить по адресу: Киев, ул. Предславинская, 12 (http://predslavinskaya.com.ua/). Партнер и соорганизатор SymfonyCamp - WorldWebStudio Программа конференции еще составляется. Желающие посетить мероприятие &#8211; пишите на  movchan@gmail.com. Если же не против выступить с докладом &#8211; в письме указывайте название доклада.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-304" style="margin: 5px;" title="new-copy" src="http://451f.com.ua/img/2009/03/new-copy.jpg" alt="new-copy" width="205" height="205" />Итак, 16 мая мы планируем провести конференцию по фреймворку Symfony.</p>
<p>Мероприятие будет проходить по адресу: Киев, ул. Предславинская, 12 (<a href="http://predslavinskaya.com.ua/">http://predslavinskaya.com.ua/</a>). Партнер и соорганизатор SymfonyCamp - <a href="http://worldwebstudio.com/">WorldWebStudio</a></p>
<p>Программа конференции еще составляется.</p>
<p>Желающие посетить мероприятие &#8211; пишите на  movchan@gmail.com.</p>
<p>Если же не против выступить с докладом &#8211; в письме указывайте название доклада.</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/symfony-camp-v-kieve-16go-maya/303/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Загрузка файлов в backend (админке) Symfony 1.2</title>
		<link>http://451f.com.ua/quick-tip-for-file-uploader-in-symfony-12/295</link>
		<comments>http://451f.com.ua/quick-tip-for-file-uploader-in-symfony-12/295#comments</comments>
		<pubDate>Mon, 02 Feb 2009 15:05:02 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[file upload]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=295</guid>
		<description><![CDATA[Итак в symfony &#60; версии 1.2, для того чтоб добавить поле загрузки файлов в backend, достаточно было внести изменения в generator.yml, т.е. изменить тип поля. Указываем типа type: admin_input_file_tag после чего поле автоматически конвертится в поле загрузки файлов. Начиная с версии 1.2.x, больше мы как прежде сделать не можем, так как всем правят формы. Соответственно [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-294" title="symfony" src="http://451f.com.ua/img/2009/02/symfony.jpg" alt="symfony" width="340" height="237" />Итак в symfony &lt; версии 1.2, для того чтоб добавить поле загрузки файлов в backend, достаточно было внести изменения в <em>generator.yml</em>, т.е. изменить тип поля. Указываем типа <em>type: admin_input_file_tag</em> после чего поле автоматически конвертится в поле загрузки файлов.</p>
<p>Начиная с версии 1.2.x, больше мы как прежде сделать не можем, так как всем правят формы.</p>
<p>Соответственно вместо внесений в <em>generator.yml</em>, нужно сделать изменения в классе форм.</p>
<p>В моем примере у меня есть класс  Album в котором есть поле Album Cover (обложка альбома), для того чтоб облажка была файловым полем, обвновляем класс формы <em>AlbumForm.class.php</em> (который создается автоматически) и вставляем в него следущее:</p>
<table border="0">
<tbody>
<tr>
<td class="line_numbers"> </td>
<td class="code">
<pre class="php" style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">class</span> AlbumForm <span style="color: #000000; font-weight: bold;">extends</span> BaseAlbumForm
<span style="color: #009900;">{</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> configure<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
  <span style="color: #009900;">{</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setWidget</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'album_cover'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormInputFile<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setValidator</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'album_cover'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorFile<span style="color: #009900;">(</span><span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'path'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'uploads/', 'required' =&gt; false<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></span></pre>
<pre class="php" style="font-family: monospace;">  <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span></pre>
</td>
</tr>
</tbody>
</table>
<p>В результате мы получим в панеле управления поле для загрузки файлов обложки.</p>
<p>Оригинал <a href="http://blog.rajatpandit.com/2009/01/30/quick-tip-for-file-uploader-in-symfony-12/" target="_blank">blog.rajatpandit.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/quick-tip-for-file-uploader-in-symfony-12/295/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Jobeet.com.ua &#8211; работа для ИТ специалистов!</title>
		<link>http://451f.com.ua/jobeetcomua-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%b8%d1%82-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%b8%d1%81%d1%82%d0%be%d0%b2/288</link>
		<comments>http://451f.com.ua/jobeetcomua-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%b8%d1%82-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%b8%d1%81%d1%82%d0%be%d0%b2/288#comments</comments>
		<pubDate>Wed, 21 Jan 2009 09:03:52 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Jobeet]]></category>

		<guid isPermaLink="false">http://451f.com.ua/?p=288</guid>
		<description><![CDATA[Все кто знаком с php фреймворком symfony, думаю следили за проектом jobeet &#8211; платформы для публикации вакансий в течении 24 дней. На сегодняшний момент нельзя посмотреть live версию проекта в интернете и я решил исправить эту ситуацию. Рад представить все интресующимся и использующих в работе symfony, доработаную версию проекта jobeet до презентабельной версии, которую вы [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jobeet.com.ua"><img class="alignleft size-full wp-image-289" style="margin: 2px 5px;" title="jobeet.com.ua - работа для ИТ специалистов" src="http://451f.com.ua/img/2009/01/jobeet.gif" alt="jobeet.com.ua - работа для ИТ специалистов" width="249" height="93" /></a> Все кто знаком с php фреймворком <a href="http://symfony-project.org" target="_blank">symfony</a>, думаю следили за проектом <a href="http://jobeet.com.ua" target="_blank">jobeet</a> &#8211; платформы для публикации вакансий в течении 24 дней.</p>
<p>На сегодняшний момент нельзя посмотреть live версию проекта в интернете и я решил исправить эту ситуацию.</p>
<p>Рад представить все интресующимся и использующих в работе <a href="http://symfony-project.org" target="_blank">symfony</a>, доработаную версию проекта <em>jobeet</em> до презентабельной версии, которую вы можете поклацать на сайте <a href="http://jobeet.com.ua" target="_blank">jobeet.com.ua</a></p>
<p>В ближайшее время для всех желающих <em>svn</em> проекта <a rel="nofollow" href="http://subversion.assembla.com/svn/ijobeet">http://subversion.assembla.com/svn/ijobeet</a>.</p>
<p>Чего коснулись доработки:</p>
<ul>
<li>Основная проблема &#8211; это <em>non-latin</em> кодировки, для которых нет коректной <em>ASCII</em> версии символов. Говоря простым языком, <em>jobeet</em> использует библиотеку <em>iconv</em> для транслитерации всех не латинских символов в <em>ASCII</em> и тут же наступает на габли, связаные с таким перекодированием.  Функция iconv возвращает на славянские символы &#8211; пустой результат, по-этому от транслитерации временно пришлось отказаться</li>
<li>Из первой проблемы вышла вторая &#8211; это поиск, который использует движок <em>Lucene</em>, через прокси фреймворка <em>Zend</em>. И тут ситуация повторяется, так как Lucene использует для создания индекса ASCII снова возникает проблема с non-latin кодировками и корректным из индексированием.<br />
Благо тут на помощь приходит то, что Zend позволяет использовать для индексирования кодировку UTF-8 (с определенныим ограничениями, о них можно прочесть в офф. документации <a href="http://framework.zend.com/manual/ru/" target="_blank">Zend Framework</a>). Вот собственно переход на utf-8 и был осуществленн для корректной индексации и поиска.</li>
<li>Добавлен русский перевод</li>
<li>Небольшой ряд мелких исправлений, я не буду на всех останавливаться, практически все исправления описаны в коментариях к коммитам в svn</li>
</ul>
<p>Все желающие разместить у себя на сайте список ИТ вакансий, в ближайшее время будет доступен API и примеры информеров.</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/jobeetcomua-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%b8%d1%82-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%b8%d1%81%d1%82%d0%be%d0%b2/288/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Новинки в symfony 1.2 или движемся к простой архитектуре (Часть 1)</title>
		<link>http://451f.com.ua/new-in-symfony-1-2-toward-a-restful-architecture-part-1/269</link>
		<comments>http://451f.com.ua/new-in-symfony-1-2-toward-a-restful-architecture-part-1/269#comments</comments>
		<pubDate>Fri, 05 Sep 2008 12:46:37 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[rout]]></category>
		<category><![CDATA[routing]]></category>

		<guid isPermaLink="false">http://451f.com.ua/2008/09/05/new-in-symfony-1-2-toward-a-restful-architecture-part-1/</guid>
		<description><![CDATA[Сегодня мы поговорим о новой системе роутинга &#8211; роутинг фрейморк. Роутинги как объекты класса До symfony 1.2, система роутинга (через класс sfPatternRouting ) хранила роуты в ассоциативном массиве. Старая система отлично работает, но при этом трудно настраиваемая под свои нужды. Для того чтоб дать разработчикам свободу в модификации и улучшении процесса роутинга, в новой версии [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня мы поговорим о новой системе роутинга &#8211; роутинг фрейморк.</p>
<h2>Роутинги как объекты класса</h2>
<p>До symfony 1.2, система роутинга (через класс <u><font face="Courier New">sfPatternRouting</font></u> ) хранила роуты в ассоциативном массиве. Старая система отлично работает, но при этом трудно настраиваемая под свои нужды. Для того чтоб дать разработчикам свободу в модификации и улучшении процесса роутинга, в новой версии все роуты хранятся как массив объекта <u><font face="Courier New">sfRoute</font></u>.</p>
<p>Роутинг 1.2 совместим с 1.1 и не требует никаких дополнительных изменений в <u><font face="Courier New">routing.yml</font></u> файле.</p>
<blockquote class="caution"><p>Если вы хотите прописать роуты напрямую в PHP, теперь нужно указывать объект <u><font face="Courier New">sfRoute</font></u> вторым аргументов для методов <u><font face="Courier New">connect()</font></u>, <u><font face="Courier New">preprendRoute()</font></u>, <u><font face="Courier New">appendRoute()</font></u>, и <u><font face="Courier New">insertRouteBefore()</font></u> :</p>
<pre class="php"><span class="re0">$routing</span>-&gt;<span class="me1">connect</span><span class="br0">(</span><span class="st0">'foo_bar'</span>, <span class="kw2">new</span> sfRoute<span class="br0">(</span><span class="st0">'/foo/:bar'</span>, <span class="kw3">array</span><span class="br0">(</span><span class="st0">'module'</span> =&gt; <span class="st0">'foo'</span>, <span class="st0">'action'</span> =&gt; <span class="st0">'bar'</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</pre>
</blockquote>
<h2>Настройка роута</h2>
<p>Конструктор класса <u><font face="Courier New">sfRoute</font></u> принимает последним аргументом массив опций, который позволяет легко настраивать роуты. В конфигурационном файле <u><font face="Courier New">routing.yml</font></u> , ключ <u><font face="Courier New">options</font></u> применяется для замены настроек по умолчанию:</p>
<pre>article:
  url:     /article/:id-:slug
  options: { segment_separators: [/, ., -] }&nbsp; </pre>
<p>В опции <u><font face="Courier New">segment_separators</font></u>&nbsp; указываются символы разделители для роута. В предыдущем примере как разделитель&nbsp; испольются <u><font face="Courier New">-</font></u> (дефис), которые в нашем случае так же валиден как и два разделителя встроенных по умолчанию (<u><font face="Courier New">/</font></u> и <u><font face="Courier New">.</font></u>). Таких образом допускаются ссылки вида <u><font face="Courier New">/article/1-my_article_title</font></u> с переменной <u><font face="Courier New">id</font></u> равной <u><font face="Courier New">1</font></u> и <u><font face="Courier New">slug</font></u> равной <u><font face="Courier New">my_article_title</font></u>.</p>
<p><span id="more-269"></span></p>
<p>Эта опция уже доступна в symfony 1.1, но только глобально для всех роутов. Таким образов добавив глобальный разделитель, вы можете нарушить работу роутингов определенных в сторонних плагинах.</p>
<p>Кроме этого доступно еще две новых опции:</p>
<ul>
<li><u><font face="Courier New">generate_shortest_url</font></u>: генерация коротких URL, насколько это возможно&nbsp;
<li><u><font face="Courier New">extra_parameters_as_query_string</font></u>: генерация дополнительных параметров в виде запроса</li>
</ul>
<p>Эти опции могут быть заданы глобально либо отдельно для каждого роута. По умолчанию обе опции равны <u><font face="Courier New">false</font></u> в <u><font face="Courier New">factories.yml</font></u> для того чтоб сохранить совместимость с предыдущими версиями symfony.</p>
<p>Пример того как использовать эти опции для настроки роутов:</p>
<pre>articles:
  url:     /articles/:page
  param:   { module: article, action: list, page: 1 }
  options: { generate_shortest_url: true }&nbsp; </pre>
<p>Этот роут генерит максимально короткий URL. Т.е. если запросить <u><font face="Courier New">page</font></u> равное <u><font face="Courier New">1</font></u>, что является значением по умолчанию для переменной <u><font face="Courier New">page</font></u>, на выходе получим URL вида <u><font face="Courier New">/articles</font></u>:</p>
<pre class="php"><span class="kw3">echo</span> url_for<span class="br0">(</span><span class="st0">'@articles?page=1'</span><span class="br0">)</span>; <span class="co1">// generates /articles</span>
<span class="co1">// would have been /articles/1 in symfony 1.1</span>&nbsp;&nbsp; </pre>
<pre class="php"><span class="kw3">echo</span> url_for<span class="br0">(</span><span class="st0">'@articles?page=2'</span><span class="br0">)</span>; <span class="co1">// generates /articles/2</span>&nbsp; </pre>
<p>Другой пример, как работает опция <u><font face="Courier New">extra_parameters_as_query_string</font></u>:</p>
<pre>articles:
  url:     /articles
  options: { extra_parameters_as_query_string: true }&nbsp; </pre>
<p>Такой роут принимает дополнительные параметры, которые не валидны для переменных заданных в патерне роута (в самом примере таких переменных как мы видим вообще нет):</p>
<pre class="php"><span class="kw3">echo</span> url_for<span class="br0">(</span><span class="st0">'@articles?page=1'</span><span class="br0">)</span>; <span class="co1">// generates /articles?page=1</span>
<span class="co1">// would not have matched the route in symfony 1.1</span></pre>
<pre class="php"><span class="kw3">echo</span> url_for<span class="br0">(</span><span class="st0">'@articles?page=2'</span><span class="br0">)</span>; <span class="co1">// generates /articles?page=2</span>&nbsp; </pre>
<p>Так как эта опция может изменить совпадение с патерном роута в зависимости от конфигурации, нужно быть очень внимательным при ее включении особенно если вы апгрейдите существующей проект.</p>
<h2>Настройка роутингов</h2>
<p>Вся логика из класса <u><font face="Courier New">sfPatternRouting</font></u> была перемещенна в объект <u><font face="Courier New">sfRoute</font></u>:</p>
<ul>
<li>Когда пришел HTTP запрос, объект роутинга опрашивает каждый роут не совпадает ли он с зпрошеным URL.
<li>И в момент когда вы хотети сгенерировать URL, объект роутинга опрашивает каждый роут на возможность сгенерировать URL по предоставленным параметрам.</li>
</ul>
<p>Добавление всей логики в класс роутига, в этом случае не важно либо это создание нового класса роутинга для иземения направления парсинга роутов либо генерация всего процесса роутов.</p>
<p>Если вы хотите изменить класс обработки роутов используемый по умолчанию на свой, добавьте ключ <u><font face="Courier New">class</font></u> в файл конфигурации роутов:</p>
<pre>article:
  url:   /article/:id
  param: { module: article, action: index }
  class: myRoute&nbsp; </pre>
<p>С такой конифгурацией ротинга, для обработки роута <u><font face="Courier New">article</font></u> symfony будет использовать класс <u><font face="Courier New">myRoute</font></u>, вместо стандартного класса <u><font face="Courier New">sfRoute</font></u>. И теперь роуты будут зависить от поведенния заданного в вашем классе.</p>
<blockquote class="tip">
<p>Новый класс <u><font face="Courier New">sfRoute</font></u> намного модульнее чем старый <font face="Courier New"><u>sfPatternRouting</u>, что позволяет легко настраивать стандартное поведение класса</font>. </p>
</blockquote>
<h2>Стандартный <u><font face="Courier New">sfRequestRoute</font></u></h2>
<p>В Symfony есть стандартный класс роутинга, <u><font face="Courier New">sfRequestRoute</font></u>, который можно применять в ходе процесса сопостовления HTTP метода:</p>
<pre>article:
  url:          /article/:id
  requirements: { sf_method: get }
  class:        sfRequestRoute&nbsp; </pre>
<p>В представленной конфигурации роутинга, роут <u><font face="Courier New">article</font></u> будет совпадать только запросу с HTTP методом <u><font face="Courier New">GET</font></u>.</p>
<p>Если вы хотите задать несколько роутов с одинаковым <font face="Courier New"><u>url</u>, но с разными методами</font>, вы можете добавить параметер&nbsp; <u><font face="Courier New">sf_method</font></u> во время генерации роута:</p>
<pre class="php"><span class="kw2">&lt;?php</span> <span class="kw3">echo</span> link_to<span class="br0">(</span><span class="st0">'Great article'</span>, <span class="st0">'@article?id=1&amp;sf_method=get'</span><span class="br0">)</span><span class="br0">)</span> <span class="kw2">?&gt;</span>&nbsp; </pre>
<p>Теперь это стало возможно так как ротинг уже знает о запрашиваемом контектсе. Во время отправки запроса, роутинг полчается следующий контекст:</p>
<ul>
<li><u><font face="Courier New">method</font></u>: HTTP метод
<li><u><font face="Courier New">format</font></u>: формат запроса&nbsp;
<li><u><font face="Courier New">host</font></u>: имя хоста&nbsp;
<li><u><font face="Courier New">is_secure</font></u>: был ли запрос вызван через HTTPS или нет&nbsp;
<li><u><font face="Courier New">request_uri</font></u>: полный запрошеный URI&nbsp;&nbsp;
<li><u><font face="Courier New">prefix</font></u>: префикс добавляемый к каждому сгенерированному запросу</li>
</ul>
<p>В общем <u><font face="Courier New">sfRequestRoute</font></u> &#8211; это первый шаг на пути к простой архитектруре.</p>
<h2>Что дальше?</h2>
<p>В следующей части, мы познакомимся с тем как symfony управляет рессурсами при автоматической генерации роутов основанных на простой конфигурации файла <u><font face="Courier New">routing.yml</font></u>. </p>
<p>О новой системе роутинга будет доклад на <a href="http://www.symfonycamp.com/"><u><font color="#0066cc">symfonyCamp</font></u></a> с большим количеством примеров и живим демо, так что все желающие пока еще не поздно регистрируйтесь.</p>
<blockquote class="tip">
<p>Если вы хотите следить за процессом внедрения изменений в symfony 1.2 проверяйте переодически страницу <a href="http://www.symfony-project.org/installation/1_2/upgrade"><u><font color="#0066cc">upgrade to symfony 1.2</font></u></a> все новинки будут появлятся на ней в по ходу появляния.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/new-in-symfony-1-2-toward-a-restful-architecture-part-1/269/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony, у плагинов появился новый дом!</title>
		<link>http://451f.com.ua/symfony-plugins-have-a-new-home/236</link>
		<comments>http://451f.com.ua/symfony-plugins-have-a-new-home/236#comments</comments>
		<pubDate>Fri, 01 Aug 2008 11:31:46 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://451f.com.ua/2008/08/01/symfony-plugins-have-a-new-home/</guid>
		<description><![CDATA[Плагины в symfony &#8211; это самый простой способ внести свой вклад в развитие фреймворка symfony. Плагины легко пишуться, пакуются, устанавливаются и они могут переписать все что угодно в фреймворке. Но существующаю система работы с плагинами не может ответить на вопросы: А есть ли плагин который добавляет &#8220;вот такую штуку&#8221; ? А поддерживает ли мой любимый [...]]]></description>
			<content:encoded><![CDATA[<p>Плагины в symfony &#8211; это самый простой способ внести свой вклад в развитие фреймворка symfony. Плагины легко пишуться, пакуются, устанавливаются и они могут переписать все что угодно в фреймворке.
<p>Но существующаю система работы с плагинами не может ответить на вопросы:
<ul>
<li>А есть ли плагин который добавляет &#8220;вот такую штуку&#8221; ?
<li>А поддерживает ли мой любимый плагин новую версию symfony 1.1?
<li>А совместим ли плагин с Doctrine?
<li>А какие самые популярные плагины?
<li>Как я могу помочь доработать плагин?</li>
</ul>
<p>С текущей системой управления плагинами Trac, на эти вопросы ответить тяжело. Сейчас в системе более 200 плагинов, вот потому и решино было сделать для них отдельную систему. </p>
<p><span id="more-236"></span>
<p>Ну и вот теперь у нас есть совершенно новый раздел &#8220;<a href="http://www.symfony-project.org/plugins/">Plugins</a>&#8221; (в верхнем меню), который и дополнил старый добрый Trac.<br />
<h4>Что умеет</h4>
<p>Ниже список фич новой системы плагинов:
<ul>
<li>Страница плагинов отображает все существующие на данный момент плагины, их можно отсортировать по версии symfony, по используемой ORM модели, по автору либо по имени плагина
<li>У каждого плагина, как и раньше, есть отдельная страница, с информацией о плагине, с текстом лицензии, с процессом установки, readme, зависимостями, списком релизов отсортированным по версиям symfony и админ панелью для разработчика плагина. Эту страницу так же можно настроить под каждую версию отдельно.<br /><img alt="http://www.symfony-project.org/uploads/assets/plugins_releases.png" src="http://www.symfony-project.org/uploads/assets/plugins_releases.png">
<li>Вся информация залинкована между собой, это означает что вы легко можете найти всех разработчиков плагина, либо все плагины выбранного разработчика<br /><img alt="http://www.symfony-project.org/uploads/assets/plugins_dev_plugins.png" src="http://www.symfony-project.org/uploads/assets/plugins_dev_plugins.png">
<li>Владелец плагина (его главный разработчик) получает доступ к админ панели управления плагином (редактирование описание, категорий, &#8230;), загрузке новых релизов и управлнию командой разработчиков плагина.<br /><img alt="http://www.symfony-project.org/uploads/assets/plugins_admin_tab.png" src="http://www.symfony-project.org/uploads/assets/plugins_admin_tab.png">
<li>Над каждым плагином могут работать несколько разработчиков с разными правами (ролями):<br />- <strong>девелопер</strong>: имеет доступ к репозиторию плагина (если он расположен в&nbsp; репозитории symfony)<br />- <strong>сборщик</strong>: может загружать новые релизы и удалять старые<br />- <strong>владелец (лидер)</strong>: что хочет то и делает с плагином
<li>Теперь если вы хотите помогать в разработке существующего плагина, достаточно попросить доступ у Владельца плагина. Этот процесс очень прост, так как сейчас все автоматизировано, от создания акканута до авторизации в SVN<br /><img alt="http://www.symfony-project.org/uploads/assets/plugins_contribute.png" src="http://www.symfony-project.org/uploads/assets/plugins_contribute.png">
<li>Категории к которым относятся плагины, может выбирать владелец (главный разработчик) админ панели управления плагином. И когда большую часть плагинов растусуют по категориям, появится возможность на главной странице плагинов отсортировать их еще и по категориям.
<li>Все trac аккаунты были перенесены в новую систему, <strong>и сейчас вы можете залогинится с вашим существующим trac аккаунтом</strong>. Т.е. одинаковые аккануты сейчас используются для Trac, Плагинов, и Subversion.</li>
</ul>
<h4>Для разработчиков плагинов</h4>
<p>Во время переноса в новую систему, произошли некоторые изменения. Ниже спискок главных моментов, которые нужно учитывать при разработке плагинов:
<ul>
<li>Информация о плагине, отображаемая на странице плагинов, берется из файла <u>package.xml</u>. Поэтому все владельцы плагинов, должны проверить и исправить свои <u>package</u> файлы.<br /> 
<li><strong>Раздел &#8220;Лицензий&#8221; в админ панеле плагина, покажет файл ЛИЦЕНЗИИ PEAR пакета, если он есть.</strong> Если его нет, то пожалуйста добавьте его в корень вашего PEAR пакета с текстом самой лицензии.<br /> 
<li><strong>Раздел &#8220;readme&#8221; покажет файл <u>README</u></strong>. Формат этого файла сменился с Trac wiki markup на Markdown, так как этот формат используется во всей документации symfony. Конвертация в Markdown из Trac wiki markup, происходит автоматически, но так как она оставляет желать лучшего, нужно сомстоятельно проверить файл README на соответствие <a href="http://daringfireball.net/projects/markdown/syntax" target="_blank">Markdown синтаксису</a><br /> 
<li>Скрипт импорта автоматически связал владельца плагина с его плагином, но это сработало если email в вашем trac аккаунте совпадал с email&#8217;ом, который вы указали с файле <u>package.xml</u>. На данный момент порядка 85 плагинов не имеют хозяев (налетаем и разбираем, кому плагинчик!). Если вы владелец плагина и вы не можете получить к нему доступ, отправьте письмо с именем вашего плагина и логином Фабьену (fabien.potencier[at]symfony-prokect.com)<br /> 
<li>Некоторые плагины не были перенесены так как были с ошибками.<br />Если вы не нашли своего плагина в новой системе, тогда посмотрите на странице <a href="http://www.symfony-project.org/plugins/errors" target="_blank">плагинов с ошибками</a> для того чтоб узнать причину. Если не знаете как побороть возникшую проблему, пишите Фабьену должен помочь<br /> 
<li>Страница с плагинами в Trac перенаплавляется на новую страницу плагинов, так что пользователи попадут туда куда хотели.</li>
</ul>
<h4>В завершение</h4>
<p>Новая система плагинов не заменяет текущую Trac систему, и так же не предлагает SVN репозитории для плагинов. Это потому что новая система не заменяет систему формирования проекта symfony. Разработчики все еще трудятся над такой системой, которая предоставит для наших плагинов выделеный SVN репозиторий, систему трекинга, wiki, и еще кучу всего разного&#8230; Так что оставайтесь на связи!</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/symfony-plugins-have-a-new-home/236/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
