<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/Developing/Configuration/Routes</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes</link>
<description>History/revisions of CakePHP/Manual/Developing/Configuration/Routes</description>
<language>en-us</language>
<item>
<title>2009-02-06 20:23:17</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes/show?time=2009-02-06+20%3A23%3A17</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".manual.developing.configuration.routes" href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Configuration&amp;nbsp;/&amp;nbsp;Routes&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2009-02-06+20%3A23%3A17">2009-02-06 20:23:17&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes">2009-03-31 21:10:41&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Множество веб-приложений имеет закрытую часть для&amp;nbsp;администрирования. Доступ в&amp;nbsp;нее обычно производится путем ввода URL&amp;nbsp;типа &lt;tt>/admin/users/edit/5&lt;/tt>. В&amp;nbsp;CakePHP роутинг админки может быть задан установкой переменной в&amp;nbsp;конфигурации функции &lt;tt>&lt;span class="missingpage">Routing.admin&lt;/span>&lt;a href="http://cake-php.ru/wiki/Routing/admin/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt>.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Множество веб-приложений имеет закрытую часть для&amp;nbsp;администратирования. Доступ в&amp;nbsp;нее обычно производится путем ввода URL&amp;nbsp;типа &lt;tt>/admin/users/edit/5&lt;/tt>. В&amp;nbsp;CakePHP роутинг админки может быть задан установкой переменной в&amp;nbsp;конфигурации функции &lt;tt>&lt;span class="missingpage">Routing.admin&lt;/span>&lt;a href="http://cake-php.ru/wiki/Routing/admin/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt>.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-01-15 16:42:35</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes/show?time=2009-01-15+16%3A42%3A35</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Configuration&amp;nbsp;/&amp;nbsp;Routes&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2009-01-15+16%3A42%3A35">2009-01-15 16:42:35&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2009-02-06+20%3A23%3A17">2009-02-06 20:23:17&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;span class="missingpage">&amp;lt;&amp;lt; Настройка ядра&lt;/span>&lt;a href="http://cake-php.ru/wiki/Core/edit?add=1" title="Создать эту страницу">?&lt;/a> | &lt;span class="missingpage">Custom Inflections &amp;gt;&amp;gt;&lt;/span>&lt;a href="http://cake-php.ru/wiki/CustomInflections/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;br />
&lt;div class="indent">&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-10-31 22:48:39</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes/show?time=2008-10-31+22%3A48%3A39</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Configuration&amp;nbsp;/&amp;nbsp;Routes&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2008-10-31+22%3A48%3A39">2008-10-31 22:48:39&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2009-01-15+16%3A42%3A35">2009-01-15 16:42:35&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Этот роут уже&amp;nbsp;написан в&amp;nbsp;файле &lt;tt>routes.php&lt;/tt> дистрибутива CakePHP (на 40 строке). Он&amp;nbsp;применяется к&amp;nbsp;любому URL, который начинается на&amp;nbsp;&lt;tt>/pages/&lt;/tt>. Роут переадресует CakePHP к&amp;nbsp;действию &lt;tt>display()&lt;/tt> контроллера &lt;tt>PagesController()&lt;/tt>. Например, запрос &lt;tt>/pages/products&lt;/tt> будет отправлен к&amp;nbsp;&lt;tt>PagesController-&amp;gt;display('products')&lt;/tt>.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Этот роут уже&amp;nbsp;написан в&amp;nbsp;файле &lt;tt>routes.php&lt;/tt> дистрибутива CakePHP (на 40 строке). Он&amp;nbsp;применяется к&amp;nbsp;любому URL, который начинается на&amp;nbsp;&lt;tt>/pages/&lt;/tt>. Роут переадресует CakePHP к&amp;nbsp;действию &lt;tt>display()&lt;/tt> контроллера &lt;tt>PagesController()&lt;/tt>. Напимер, запрос &lt;tt>/pages/products&lt;/tt> будет отправлен к&amp;nbsp;&lt;tt>PagesController-&amp;gt;display('products')&lt;/tt>.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-10-31 22:46:48</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes/show?time=2008-10-31+22%3A46%3A48</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Configuration&amp;nbsp;/&amp;nbsp;Routes&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2008-10-31+22%3A46%3A48">2008-10-31 22:46:48&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2008-10-31+22%3A48%3A39">2008-10-31 22:48:39&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">В&amp;nbsp;контроллере вызовется действие с&amp;nbsp;приставкой &lt;tt>admin_&lt;/tt>. Используя пример, &lt;tt>/admin/users/edit/5&lt;/tt> вызовет метод &lt;tt>admin_edit&lt;/tt> из&amp;nbsp;контроллера &lt;tt>UsersController&lt;/tt>, передав 5 в&amp;nbsp;качестве параметра.&lt;br />
Любой вызов передаст управление методу с&amp;nbsp;приставкой &lt;tt>profiles_&lt;/tt>. В&amp;nbsp;нашем примере, URL&amp;nbsp;&lt;tt>/profiles/users/edit/5&lt;/tt> вызовет метод &lt;tt>profiles_edit&lt;/tt> в&amp;nbsp;&lt;tt>UsersController&lt;/tt>. Важно помнить, что&amp;nbsp;HTML хелпер создает ссылки с&amp;nbsp;соблюдением префиксов. Например:&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">В&amp;nbsp;контроллере вызовется действие с&amp;nbsp;приставкой &lt;tt>admin_&lt;/tt>. Используя пример, &lt;tt>/admin/users/edit/5&lt;/tt> вызовет метод &lt;tt>admin_edit&lt;/tt> из&amp;nbsp;контроллера &lt;tt>&lt;span class="missingpage">Users&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/UsersController/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt>, передав 5 в&amp;nbsp;качестве параметра.&lt;br />
Любой вызов передаст управление методу с&amp;nbsp;приставкой &lt;tt>profiles_&lt;/tt>. В&amp;nbsp;нашем примере, URL&amp;nbsp;&lt;tt>/profiles/users/edit/5&lt;/tt> вызовет метод &lt;tt>profiles_edit&lt;/tt> в&amp;nbsp;&lt;tt>&lt;span class="missingpage">Users&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/UsersController/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt>. Важно помнить, что&amp;nbsp;HTML хелпер создает ссылки с&amp;nbsp;соблюдением префиксов. Например:&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2008-05-17 14:34:24</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes/show?time=2008-05-17+14%3A34%3A24</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Configuration&amp;nbsp;/&amp;nbsp;Routes&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2008-05-17+14%3A34%3A24">2008-05-17 14:34:24&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Configuration/Routes?time=2008-10-31+22%3A46%3A48">2008-10-31 22:46:48&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Для&amp;nbsp;дополнительной гибкости вы&amp;nbsp;можете определить собственные элементы роута. Таким образом можно указать какие элементы в&amp;nbsp;URL могут быть неверными. Когда запрос выполняется, то&amp;nbsp;значения для&amp;nbsp;элементов пользовательских роутов расположены в&amp;nbsp;переменной контроллера &lt;tt>$this-&amp;gt;params&lt;/tt>. Это&amp;nbsp;заметно при&amp;nbsp;обработке : именованные параметры (/controller/action/name:value) будут искаться с&amp;nbsp;помощью $this-&amp;gt;passedArgs, тогда как&amp;nbsp;данные роутинга будут доступны так: &lt;tt>$this-&amp;gt;params&lt;/tt>. Когда объявляете собственный роутинг, следует задать правило для&amp;nbsp;его обработки, что&amp;nbsp;бы&amp;nbsp;CakePHP знал, правильно сформирован запрос или&amp;nbsp;нет.&lt;br />
&lt;div class="indent">&lt;div class="indent">'/:controller/:id',&lt;br />
array('action' =&amp;gt; 'view'),&lt;br />
array('id' =&amp;gt; '[&lt;span class="nobr">0&amp;ndash;9&lt;/span>]+')&lt;/div>&lt;/div>
Этот простой пример показывает, как&amp;nbsp;создать переадресацию на&amp;nbsp;контроллер URL&amp;nbsp;вида &lt;tt>/controllername/id&lt;/tt>. URL&amp;nbsp;обрабатывается функцией &lt;tt>connect()&lt;/tt> с&amp;nbsp;двумя параметрами: &lt;tt>:controller&lt;/tt> и&amp;nbsp;&lt;tt>:id&lt;/tt>. Элемент &lt;tt>:controller&lt;/tt> стандартный элемент роутинга в&amp;nbsp;CakePHP, так&amp;nbsp;как обычно имя&amp;nbsp;контроллера находится в&amp;nbsp;URL. Элемент &lt;tt>:id&lt;/tt> является передаваемым параметром. Происходит проверка его&amp;nbsp;соответствия шаблону, заданному в&amp;nbsp;третьем параметре функции &lt;tt>connect()&lt;/tt>. Это&amp;nbsp;говорит CakePHP, как&amp;nbsp;различить ID&amp;nbsp;в URL&amp;nbsp;и&amp;nbsp;не спутать с&amp;nbsp;чем-то другим.&lt;br />
После объявления роутинга, запрос &lt;tt>/apples/5&lt;/tt> будет аналогичен &lt;tt>/apples/view/5&lt;/tt>. Оба&amp;nbsp;вызывают метод &lt;tt>view()&lt;/tt> в&amp;nbsp;контроллере. Внутри метода &lt;tt>view()&lt;/tt> доступ к&amp;nbsp;значению ID&amp;nbsp;производится так: &lt;tt>$this-&amp;gt;params[‘id’]&lt;/tt>.&lt;br />
Вот&amp;nbsp;еще один пример:&lt;br />
&lt;div class="indent">&lt;div class="indent">'/:controller/:year/:month/:day',&lt;br />
array('action' =&amp;gt; 'index', 'day' =&amp;gt; null),&lt;br />
array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'year' =&amp;gt; '[12][&lt;span class="nobr">0&amp;ndash;9&lt;/span>]{3}',&lt;br />
'month' =&amp;gt; '(0[&lt;span class="nobr">1&amp;ndash;9&lt;/span>]|1[012])',&lt;br />
'day' =&amp;gt; '(0[&lt;span class="nobr">1&amp;ndash;9&lt;/span>]|[12][&lt;span class="nobr">0&amp;ndash;9&lt;/span>]|3[01])'&lt;br />
&lt;/div>&lt;/div>)&lt;/div>&lt;/div>
Это&amp;nbsp;показывает, как&amp;nbsp;можно создавать действительно сложные комбинации. В&amp;nbsp;данном примере четыре параметра. Первый параметр нам&amp;nbsp;знаком: это&amp;nbsp;имя контроллера, которому будет передано управление.&lt;br />
Далее мы&amp;nbsp;задали пару значений по&amp;nbsp;умолчанию: в&amp;nbsp;контроллере будет запущен метод &lt;tt>index()&lt;/tt>. Так&amp;nbsp;же&amp;nbsp;четвертый параметр был&amp;nbsp;задан как&amp;nbsp;опциональный.&lt;br />
И&amp;nbsp;наконец, мы&amp;nbsp;определили правила для&amp;nbsp;обработки и&amp;nbsp;сравнения трех параметров.&lt;br />
После этого, роутинг &lt;tt>/articles/2007/02/01&lt;/tt>, &lt;tt>/posts/2004/11/16&lt;/tt>, и&amp;nbsp;&lt;tt>/products/2001/05&lt;/tt> (опускаем опциональный параметр) будет вызывать метод &lt;tt>index()&lt;/tt> соответсвующего контроллера, а&amp;nbsp;данный будут в&amp;nbsp;массиве &lt;tt>$this-&amp;gt;params&lt;/tt>.&lt;a name="h553-1">&lt;/a>&lt;h2>Принятие параметров&lt;/h2>
Выделение параметров произошло, и&amp;nbsp;теперь желаете иметь доступ к&amp;nbsp;ним типа &lt;tt>$articleID&lt;/tt> вместо &lt;tt>$this-&amp;gt;params['id']&lt;/tt>. Тогда добавим третий параметр-массив в&amp;nbsp;&lt;tt>Router::connect()&lt;/tt>.&lt;br />
// some_controller.php&lt;br />
function view($articleID = null, $slug = null) {&lt;br />
&lt;div class="indent">&lt;div class="indent">// some code here...&lt;/div>&lt;/div>
}&lt;br />
// routes.php&lt;br />
&lt;div class="indent">&lt;div class="indent">// E.g. /blog/3-&lt;span class="missingpage">Cake&amp;nbsp;PH&amp;nbsp;P_&amp;nbsp;Rocks&lt;/span>&lt;a href="http://cake-php.ru/wiki/CakePHPRocks/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;br />
'/blog/:id-:slug',&lt;br />
array('controller' =&amp;gt; 'blog', 'action' =&amp;gt; 'view'),&lt;br />
array(&lt;br />
&lt;div class="indent">&lt;div class="indent">// order matters since this will simply map&amp;nbsp;&amp;#147;:id&amp;#148; to $articleID in&amp;nbsp;your action&lt;br />
'pass' =&amp;gt; array('id', 'slug'),&lt;br />
'id' =&amp;gt; '[&lt;span class="nobr">0&amp;ndash;9&lt;/span>]+'&lt;br />
&lt;/div>&lt;/div>)&lt;/div>&lt;/div>
И&amp;nbsp;теперь можно использовать множество способов, так&amp;nbsp;как Cake знает, как&amp;nbsp;обрабатывать каждый роут.&lt;br />
// view.ctp&lt;br />
// this will return a&amp;nbsp;link to&amp;nbsp;/blog/3-&lt;span class="missingpage">Cake&amp;nbsp;PH&amp;nbsp;P_&amp;nbsp;Rocks&lt;/span>&lt;a href="http://cake-php.ru/wiki/CakePHPRocks/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;br />
&amp;lt;?= $html-&amp;gt;link('CakePHP Rocks', array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'controller' =&amp;gt; 'blog',&lt;br />
'action' =&amp;gt; 'view',&lt;br />
'id' =&amp;gt; 3,&lt;br />
'slug' =&amp;gt; Inflector::slug('CakePHP Rocks')&lt;/div>&lt;/div>
)) ?&amp;gt;&lt;a name="h553-2">&lt;/a>&lt;h2>Роутинг приставок&lt;/h2>
Множество веб-приложений имеет закрытую часть для&amp;nbsp;администратирования. Доступ в&amp;nbsp;нее обычно производится путем ввода URL&amp;nbsp;типа &lt;tt>/admin/users/edit/5&lt;/tt>. В&amp;nbsp;CakePHP роутинг админки может быть задан установкой переменной в&amp;nbsp;конфигурации функции &lt;tt>&lt;span class="missingpage">Routing.admin&lt;/span>&lt;a href="http://cake-php.ru/wiki/Routing/admin/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt>.&lt;br />
Configure::write('&lt;span class="missingpage">Routing.admin&lt;/span>&lt;a href="http://cake-php.ru/wiki/Routing/admin/edit?add=1" title="Создать эту страницу">?&lt;/a>', 'admin');&lt;br />
В&amp;nbsp;контроллере вызовется действие с&amp;nbsp;приставкой &lt;tt>admin_&lt;/tt>. Используя пример, &lt;tt>/admin/users/edit/5&lt;/tt> вызовет метод &lt;tt>admin_edit&lt;/tt> из&amp;nbsp;контроллера &lt;tt>&lt;span class="missingpage">Users&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/UsersController/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt>, передав 5 в&amp;nbsp;качестве параметра.&lt;br />
Так&amp;nbsp;же&amp;nbsp;можно задать ссылку &lt;tt>/admin&lt;/tt> на&amp;nbsp;действие &lt;tt>admin_index&lt;/tt> в&amp;nbsp;контроллере следующим кодом:&lt;br />
Router::connect('/admin', array('controller' =&amp;gt; 'pages', 'action' =&amp;gt; 'index', 'admin' =&amp;gt; true)); &lt;br />
Можно использовать подобный роутинг и&amp;nbsp;путем явного задания действия.&lt;br />
Router::connect('/profiles/:controller/:action', array('prefix' =&amp;gt; 'profiles', 'profiles' =&amp;gt; true)); &lt;br />
Любой вызов передаст управление методу с&amp;nbsp;приставкой &lt;tt>profiles_&lt;/tt>. В&amp;nbsp;нашем примере, URL&amp;nbsp;&lt;tt>/profiles/users/edit/5&lt;/tt> вызовет метод &lt;tt>profiles_edit&lt;/tt> в&amp;nbsp;&lt;tt>&lt;span class="missingpage">Users&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/UsersController/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/tt>. Важно помнить, что&amp;nbsp;HTML хелпер создает ссылки с&amp;nbsp;соблюдением префиксов. Например:&lt;br />
echo $html-&amp;gt;link('Edit your profile', array('controller' =&amp;gt; 'users', 'action' =&amp;gt; 'profiles_edit', 'profiles' =&amp;gt; true)); &lt;br />
Так&amp;nbsp;же&amp;nbsp;можно создавать комбинированные приставки и&amp;nbsp;вызовы в&amp;nbsp;структуре приложения.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Для&amp;nbsp;дополнительной гибкости вы&amp;nbsp;можете определить собственные элементы роута. Таким образом можно указать какие элементы в&amp;nbsp;URL могут быть неверными. Когда запрос выполняется, то&amp;nbsp;значения для&amp;nbsp;элементов пользовательских роутов расположены в&amp;nbsp;переменной контроллера &lt;tt>$this-&amp;gt;params&lt;/tt>.&lt;br />
&lt;span class="mark">Продолжение будет. Скоро.&lt;/span>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
