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