Pull to refresh

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


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

Предисловие


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

Огромное спасибо за внимание!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.