Может кто-нибудь объяснить систему маршрутизации Kohana 3? - PullRequest
9 голосов
/ 19 января 2010

В bootstrap.php, где вы устанавливаете маршруты, мне трудно заставить их работать. Некоторое время назад я прочитал некоторую документацию, которую я не могу найти снова, которая объясняет их. Вот один из моих примеров

Route::set('products', 'products/(type)', array('type' => '.+'))
    ->defaults(array(
    'controller' => 'articles',
    'action' => 'view_product',
    'page' => 'shock-absorbers',
    ));

Я думал , что означало бы, что запрос типа products/something загрузит контроллер articles и метод action_view_product(). Но я не могу заставить его работать.

Может кто-нибудь объяснить мне, как именно они работают, и каковы все параметры метода?

Ответы [ 4 ]

5 голосов
/ 19 января 2010

Я думал, что это будет означать запрос как продукты / что-то загрузится контроллер статей и action_view_product controller . Но я не могу заставить его работать.

Вы ошиблись жирной частью. Фактически он загрузит action_view_product метод контроллера статей:

class Controller_Articles extends Controller {
   public function action_view_product() {
       $params = $this->request->param(); 
       // if the uri is `products/something' then $params['type'] == 'something'
   }
}

EDIT:

Боже мой, боже мой, почему я не заметил !!!

Фактическая проблема заключается в вашем шаблоне маршрута! Это должно было быть products/(<type>) с угловыми скобками. Те намекают Кохане, что вы предполагали, что «тип» будет именем параметра, а не литералом.

3 голосов
/ 19 января 2010

В скобках указаны необязательные части (регулярное выражение будет совпадать, если они отсутствуют).Они могут быть статическими и / или содержать именованные переменные.Угловые скобки указывают именованную переменную в маршруте, которая доступна в контроллере через:

$this->request->param('type');

Я написал официальное руководство по маршрутизации, которое вы можете прочитать здесь , оно должно отвечать на всеваши вопросы.

3 голосов
/ 19 января 2010

Uff, извините, ниже и больше, чем знаки не отображаются правильно

'products/(type)' should be 'products/(<type>)'
0 голосов
/ 21 мая 2013

Для записи:

Доступ к каталогу, контроллеру и действию можно получить из Запроса в виде открытых свойств, например:

// From within a controller:
$this->request->action;
$this->request->controller;
$this->request->directory;

// Can be used anywhere:
Request::instance()->action;
Request::instance()->controller;
Request::instance()->directory;

источник: http://kohanaframework.org/3.0/guide/kohana/routing#request-parameters

...