<?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; routing</title>
	<atom:link href="http://451f.com.ua/tag/routing/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 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>Новинки в 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>
	</channel>
</rss>
