
Добрый день, Хабраюзеры!
Сегодня я расскажу вам о роутах и с чем их едят.
Предисловие
Роутинг обычно используют взамену GET запросам, а так же вывод красивого ЧПУ без использования htaccess и для вывода функции заданной в запросе. Чаще всего роутинг можно заметить почти во всех известных php фреймворках. Роутинг используют как правило в MVC моделях, сегодня я вам расскажу как сделать роутинг на чистом php, углубляться не буду, будут вопросы — задавайте.
Пример класса для работы с роутами
<?php
class Routing extends Apps { // Как вы видите, мы сразу наследуем класс Apps, который содержит нужные нам функции
var $main_action = 'index'; // Функция, вызываемая по стандарту
var $funcs_prefix = 'rout_'; // Префикс к функциям
var $modules = 'modules'; // Название роута для объекта, в нашем случае модули
function __construct ()
{
$this->routs = explode('/', $_SERVER['REQUEST_URI']); // Разделяем наш запрос
if ($this->routs[2] == $this->modules OR !count($this->routs[2])) { // Если передаётся нужный нам объект либо вообще ничего
$this->action = $this->routs[3];
$this->action = ($this->action == NULL OR !count($this->action)) ? $this->main_action : $this->action;
$this->get_routs ();
}
}
function get_routs ()
{
$action = $this->funcs_prefix . $this->action; // Получаем название функции
if(method_exists($this, $action)) $this->$action(); // Если функция присутствует, то выполняем
else die('Возникла ошибка, ваш запрос не верен!');
}
}
?>
Пример класса с нашими приложениями
<?php
class Apps {
function rout_test ()
{
print 'test';
}
function rout_index ()
{
print 'Вывод типичной главной страницы';
}
}
?>
Использование
<?php
define('DIR', realpath(dirname(__FILE__)));
require_once DIR . '/apps/apps.php'; // Путь к приложениям
require_once DIR . '/classes/routing.php'; // Путь к классу
$routing = new Routing;
?>
Пример запроса
Запрос к нашему приложению будет выглядеть примерно так: site.com/index.php/modules/test
Огромное спасибо за внимание!