Маршрутизация строк запроса в Kohana3 - PullRequest
0 голосов
/ 19 января 2011

Я пытаюсь перенаправить URL http://host/order?servertype=1&plan=1 со следующей записью в bootstrap.php

Route::set('order', 'order(/<action>)?servertype=<id1>&plan=<id2>', array('id1'=>'[0-9]+','id2'=>'[0-9]+'))
  ->defaults(array(
      'controller' => 'order',
      'action' => 'index',
  ));

Я получаю ошибку: Невозможно найти маршрут, соответствующий URI.Что я делаю не так?

1 Ответ

2 голосов
/ 19 января 2011

Система маршрутизации Kohana не предназначена для работы со строкой запроса (и я верю, что то же самое верно для большинства фреймворков). Если вам действительно нужно манипулировать строкой запроса таким образом, вам придется переместить логику из Kohana в файл .htaccess, используя mod_rewrite.

Однако предпочтительным способом выполнения маршрутизации является использование иерархической структуры URL-адреса (в стиле пути), а затем использование строки запроса для любой информации, которая не может быть представлена ​​иерархически (к которой затем можно получить доступ непосредственно из контроллера через * 1003). *).

Это будет означать использование структуры URL, такой как http://host/order/<id1>/<id2>, и схемы маршрутизации, такой как:

Route::set('order', 'order(/<action>)/<id1>/<id2>', array('id1'=>'[0-9]+','id2'=>'[0-9]+'))
  ->defaults(array(
      'controller' => 'order',
      'action' => 'index',
  ));

Однако, при использовании этого типа структуры URL, лучше использовать больше описательных токенов в URL, чем простые числовые идентификаторы. Поэтому вы можете рассмотреть возможность использования "slugs" для определения типов серверов и планов, что даст вам более удобочитаемые и удобные для SEO URL-адреса, например http://host/order/server-type/plan.

.
...