Пишем простейший роутинг
от Artorius
Доброго времени суток, %username%! Сто лет ничего не писал и столько же лет выходят статьи на эту тему, но все же, я оставлю это здесь
Итак, чем же мы займемся? Мы напишем роутинг в стиле скелетона.
Что же такое роутинг и с чем его едят:
Вот, что говорит вики на этот счет - Routing) — процесс определения маршрута следования информации в сетях связи. Маршруты могут задаваться административно (статические маршруты), либо вычисляться с помощью алгоритмов маршрутизации, базируясь на информации о топологии и состоянии сети, полученной с помощью протоколов маршрутизации (динамические маршруты).
Маршрутизация — Википедия
https://ru.wikipedia.org/wiki/Маршрутизация
А если проще и ближе к делу - роутинг, это средство определения и контроля маршрута запроса пользователя. В PHP это чаще всего замена жесткого пути к файлам на диске, на программную обработку запроса и замену файлов на методы
Для готовки маршрутизатора нам понадобятся следующие ингредиенты:
1. Прямые руки (2шт.)(при кривизне выпрямить в заборе).
2. Более менее внятный блокнот. Советую Notepad++
3. Настроенный локальный сервер/хостинг
4. Терпение.
5. Собсно программист или что-то на него похожее
Приступим. Давайте определим принцип работы нашего роутера!
Создадим файлы и директории:
__DIR__ ->
index.php
system ->
controller ->
Route.php
model ->
Data.php
View.php
Итак, создадим файл index.php в корне нашего сайта, он будет точкой входа:
Создадим прелоадер
Создадим файл данных
Создаем файл роутера
Создадим файл загрузки видов
Вот, наверное и все =) Спасибо, за прочтение стольких многих букафф
Итак, чем же мы займемся? Мы напишем роутинг в стиле скелетона.
Что же такое роутинг и с чем его едят:
Вот, что говорит вики на этот счет - Routing) — процесс определения маршрута следования информации в сетях связи. Маршруты могут задаваться административно (статические маршруты), либо вычисляться с помощью алгоритмов маршрутизации, базируясь на информации о топологии и состоянии сети, полученной с помощью протоколов маршрутизации (динамические маршруты).
Маршрутизация — Википедия
https://ru.wikipedia.org/wiki/Маршрутизация
А если проще и ближе к делу - роутинг, это средство определения и контроля маршрута запроса пользователя. В PHP это чаще всего замена жесткого пути к файлам на диске, на программную обработку запроса и замену файлов на методы
Для готовки маршрутизатора нам понадобятся следующие ингредиенты:
1. Прямые руки (2шт.)(при кривизне выпрямить в заборе).
2. Более менее внятный блокнот. Советую Notepad++
3. Настроенный локальный сервер/хостинг
4. Терпение.
5. Собсно программист или что-то на него похожее
Приступим. Давайте определим принцип работы нашего роутера!
Создадим файлы и директории:
__DIR__ ->
index.php
system ->
controller ->
Route.php
model ->
Data.php
View.php
Итак, создадим файл index.php в корне нашего сайта, он будет точкой входа:
- <?php
- // index.php
- //Разрешение на вызов файлов только из одной точки входа.
- define("ACCESS",true);
- //Создаем константу стартового пути
- define("PATH",__DIR__);
- //Подключаем файл прелоадер
- include_once PATH."/system/bootstrap.php";
- //Создаем экземпляр роутера
- $route = new Route();
- //Запускаем роутер
- $route->run();
- ?>
Создадим прелоадер
- <?php
- // bootstrap.php
- //Проверяем был ли вызван файл системой или напрямую. Перенаправляем на главную
- defined("ACCESS")or die(header("location:../index.php"));
- //Создаем константы
- //Системные файлы
- define("SYSTEM",PATH."/system");
- //Модели
- define("MODEL",SYSTEM."/model");
- //Контроллеры
- define("CONTR",SYSTEM."/controller");
- //Виды
- define("VIEW",SYSTEM."/view");
- //Подгружаем все файлы
- //Файл данных
- include_once MODEL."/Data.php";
- //Работа с видами
- include_once MODEL."/View.php";
- //Контроллер
- include_once CONTR."/Route.php";
- ?>
Создадим файл данных
- <?php
- //Data.php
- //Проверяем был ли вызван файл системой или напрямую. Перенаправляем на главную
- defined("ACCESS")or die(header("location:../index.php"));
- class Data{
- public $data;
- function __construct() {
- $this->data = array(
- "pages" => array(
- // Именованный массив, чтобы была возможность шифровать роутинг
- "index" => "index",
- "default" => "index",
- ),
- );
- }
- }
- ?>
Создаем файл роутера
- <?php
- //Route.php
- //Проверяем был ли вызван файл системой или напрямую. Перенаправляем на главную
- //Роутером будет $_GET['r'] и будет иметь вид index.php?r=
- defined("ACCESS")or die(header("location:../index.php"));
- class Route{
- private $page;
- public function run(){
- $data = new Data();
- //Проверяем, использован ли наш роутер
- if(isset($_GET['r'])){
- //Проверяем, есть ли такой маршрут
- if(array_key_exists(htmlspecialchars(stripslashes(trim($_GET['r']))),$data->data["pages"])){
- //Если есть, определяем $page именем метода
- $this->page = $data->data["pages"][htmlspecialchars(stripslashes(trim($_GET['r'])))];
- }else{
- //Если нет маршрута, используем дефолтный
- $this->page = $data->data["pages"]["default"];
- }
- }else{
- //Если не использован роутер, перенаправляем на главную
- $this->page = $data->data["pages"]["default"];
- }
- //Собираем метод. Он будет иметь вид self::action_ROUTEGETNAME()
- $page = $this->page;
- $methodname = "action_$page";
- self::$methodname();
- }
- //Создаем метод загрузки главной
- public static function action_index(){
- //Инициализируем модель вида
- $view = new View();
- //Загружаем вид
- $view->load("index");
- }
- }
- ?>
Создадим файл загрузки видов
- <?php
- //View.php
- //Проверяем был ли вызван файл системой или напрямую. Перенаправляем на главную
- defined("ACCESS")or die(header("location:../index.php"));
- class View{
- public function load($name){
- $path = VIEW."/$name.html";
- //Проверяем есть ли такой вид. Если есть, подрубаем
- if(file_exists($path)){
- require_once($path);
- }else{
- //Иначе загружаем дефолтный вид
- $data = new Data();
- $path = VIEW."/".$data->data["pages"]["default"]."html";
- require_once($path);
- }
- }
- }
- ?>
Вот, наверное и все =) Спасибо, за прочтение стольких многих букафф