Роутинг PHP и с чем его едят

16 Апр
2012


Добрый день, Блогаюзеры!
Сегодня я расскажу вам о роутах и с чем их едят.

Предисловие


Роутинг обычно используют взамену 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

Огромное спасибо за внимание!
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх