Простой роутер (Rating: +4)

Print RSS
Данный роутер не претендует на звание лучшего решения и пойдет сугубо новичкам как отталкивающий материал для создания своей системы роутера по сайту, но вполне рабочее решение которое можно применять в реальных проектах. Ну поехали.

Для начала добавим в файл .htaccess следующий код:
DirectoryIndex index.php
Options All -Indexes

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
С помощью этого кода делаем единую точку входа. Все наши запросы к сайту будут проходить через index.php.

Теперь пишем файл роутера назовем его допустим route.php и положим по адресу domaine.ru/core/route.php:
<?php
/* Константы - обычно задаются раньше чем в самом файле роутера */
define('CORE_DIRECTORY', __DIR__);

// Действия по умолчанию  
$application_name_default = 'main';  
$action_name_default = 'index';  

// Разбираем url на части  
$routes = explode('/', filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL));  

// Получаем имя приложения 
$application_name = !empty($routes[1]) ? $routes[1] : $application_name_default; 
// Получаем имя экшена 
$action_name = !empty($routes[2]) ? $routes[2] : $action_name_default;  

// Грузим приложение  
$application_path = CORE_DIRECTORY . '/application/'. strtolower($application_name . '/' . $action_name) . '.php';
if ( file_exists($application_path) )  
{  
    require $application_path;  
}  
else  
{  
    // Если неверное приложение то на главную  
    $application_path = CORE_DIRECTORY . '/application/'.$application_name_default.'/'.$action_name_default.'.php'; 
    require $application_path;  
}
При необходимости путь "CORE_DIRECTORY . '/application/" заменить на свой и поместить файл route.php куда нужно (а лучше использовать его как class).
Теперь ссылки делаем формата <a href="/chat/index">Чат<a> где "chat" это папка с файлами а "index" нужный файл.

Адрес типа domaine.ru/chat приведет к domaine.ru/core/application/chat/index.php
А адрес domaine.ru/chat/list приведет к domaine.ru/core/application/chat/list.php

Так же можно по простому передавать GET переменные:
domaine.ru/chat?page=2 и использовать "page" как обычную GET переменную (не забываем фильтровать при надобности).

Если будут вопросы прошу в ЛС =)
Added:
Rating: +4
Views: 3035
Comments (33) »