DeveloperDoc/Router

Version 6 (modified by pingvein@…, 6 weeks ago)

опечатка

Роутинг

В момент обращения пользоваталя к сайту движок должен произвести разбор запрашиваемого URL, определить какой экшен необходимо запустить и отправить его(экшен) на выполнение. Этим как раз и занимается роутинг, класс роутинга - /engine/classes/Router.class.php.

При запуске роутинг производит загрузку ядра через класс Engine (файл /engine/classes/Engine.class.php), происходит инициализация модулей, хуков и плагинов. Затем начинается разбор URL на составляющие.

Используется следующая структура URL: http://site.com/action/event/param0/param1/../paramN/?var1=value1&var2=value2 , где:

  • action - имя экшена, который будет обрабатывать такой URL, соответствие именем экшена в URL и названием класса задается в конфиге роутинга.
  • event - евент, который будет запускаться внутри экшена, определение евента можно назначать с помощью регулярного выражения
  • paramN - дополнительные параметры переданные в URL
  • varN - обычные GET параметры запроса

Далее запускается необходимый экшен, после его выполнения происходит завершения всех активных модулей и вывод результата в браузер.


Конфиг роутинга

Пример конфига:

$config['router']['page']['error']         = 'ActionError';
$config['router']['page']['blog']          = 'ActionBlog';
$config['router']['page']['index']         = 'ActionIndex';
// Глобальные настройки роутинга
$config['router']['config']['action_default']   = 'index';
$config['router']['config']['action_not_found'] = 'error';

Здесь первые три строчки устанавливает соответствия URL экшена и названию класса, который будет его обрабатывать. Например, для URL http://site.com/blog/ будет запускаться экшен ActionBlog.

Также необходимо назначить экшен, который будет запускаться по умолчанию, т.е. при заходе на URL http://site.com/. В нашем случаи это index и соответственно ActionIndex. Для этого используется параметр router.config.action_default.

И последнее, это назначение экшена, который будет запускаться при обращении к любой странице не описанной в конфиге роутера, т.е. запрос несуществующего URL. Например, http://site.com/blabla/. За это отвечает параметр router.config.action_not_found, в нашем случаи он имеет значение error.


Реврайты роутинга

Поддерживается два вида реврайтов:

  1. переопределение названия экшена
  2. создание псевдонима(alias) для определенного URL

Переопределение названия экшена

$config['router']['rewrite'] = array(
        'blog' => 'forum',
);

В данном примере экшен blog заменяется на forum, т.е. URL http://site.com/blog/ перестанет работать, а вместо него заработает http://site.com/forum/.

Создание псевдонима

$config['router']['uri'] = array(	
	'~^(\d+)\.html~i' => "blog/\\1.html",
);

Здесь URL вида http://site.com/123.html будут эквивалентны http://site.com/blog/123.html, причем будут работать оба варианта.


Доступные методы Router

В классе роутера содержаться полезные статические методы:

  • getInstance() - возвращает экземпляр объекта роутера
  • Action($sAction,$sEvent=null,$aParams=null) - переадресует выполнение на новый экшен (внутренний реврайт). Для этого в текущем экшене необходимо возвратить этот метод, например, return Router::Action('error') запустит экшен error
  • GetPathWebCurrent() - возвращает полный URL без GET параметров, например, для URL http://site.com/user/ort/?var=123 результат будет http://site.com/user/ort/
  • GetAction() - возвращает текущий экшен, например, blog
  • GetActionEvent() - возвращает текущий эвент, например, edit
  • GetActionClass() - возвращает класс текущего экшена, например, ActionBlog
  • SetActionEvent($sEvent) - устанавливает новый текущий эвент
  • GetParams() - возвращает массив текущих параметров, которые были переданные через URL. Например, для http://site.com/user/ort/edit/fast/ вернет значение array('edit','fast')
  • GetParam($iOffset,$def=null) - возвращает параметр по его номеру/смещению, $def определяет дефолтное значение в случаи если параметра не существует. Например, для http://site.com/user/ort/edit/fast/ Router::GetParam(0) вернет значение edit
  • SetParam($iOffset,$value) - устанавливает значение параметра, например, Router::SetParam(0,'add')
  • SetIsShowStats($bState) - устанавливает флаг показывать или нет статистику выполнения скрипта, например, Router::SetIsShowStats(false)
  • GetIsShowStats() - возвращает флаг возможности отображения статистики выполнения скрипта
  • GetPath($action) - возвращает полный URL до экшена, например, Router::GetPath('blog') вернет значение http://site.com/blog/
  • Location($sLocation) - вызывает завершение всех активных модулей и выполняет переадресацию через header('Location: http://site.com/blabla/'); с 301 кодом HTTP (Moved Permanently). Например, Router::Location('http://google.com')