Простой роутер (Оценка: +3)

Печать / 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 переменную (не забываем фильтровать при надобности).

Если будут вопросы прошу в ЛС =)
Автор статьи: Александр (13.11.14 / 21:57)
роутер на php, Mod Rewrite
Рейтинг: +3
Просмотров: 2276
Комментарии (33) »