[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Посмотрите код, и подскажите что дальше?
J1upuk
Пишу свой MVC движок, на данный момент написал только роутинг, изобретаю велосипед потому что хочу именно понять как это работает, набить шишек, понять логику. Хочу чтобы знатоки оценили мой гавнокод, указали на индусские места и дыры в логике, где что можно сделать лучше и почему, прошу не тыкать ссылками на гитхабы крупных проектов, цель - понять как устроено всё на практике. Постарался всё максимально закомментировать.
Код


<?php

define('EXT', '.php');
define('ROOTPATH', realpath(dirname(__FILE__)) . '/');
define('CTRLS', ROOTPATH . 'controllers/');

final class Route
{

/**
* Инициализация массива для хранения маршрутов
*/

protected static $_routes = [];

/**
* Метод установки маршрутов
*/

public static function set($mRegex, $pRegex, $controller, $action)
{
Route::$_routes[] = [
'mRegex' => $mRegex,
'pRegex' => $pRegex,
'controller' => $controller,
'action' => $action,
];

}

/**
* Метод обработки запросов
*/

public static function start($uri)
{
$split = explode('?', (trim($uri, '/'))); // Отделяем GET параметры

foreach(self::$_routes as $item)
{
if(preg_match('/' . $item['mRegex'] . '/', $split[0])) // Подходит ли запрос под регулярку? Если да:
{
$ctrlrPath = CTRLS . $item['controller'] . EXT;

if(is_file($ctrlrPath)) // А существует вообще файл с классом контроллера?
{
require_once($ctrlrPath); // Да? Тогда подключаем.

$controller = new $item['controller']();
$params = [];

if(preg_match('/' . $item['pRegex'] . '/', $split[1])) // подходит ли строка параметров под регулярку?
{
foreach($_GET as $key => $value) // Подходит? Формируем массив параметров...
{
$params[$key] = $value;
}
$controller->$item['action']($params); // Вызываем действие с переданными параметрами.
}
else
{
$controller->$item['action'](); // иначе вызываем действие с параметрами по умолчанию...
}
break;
}
else
{
self::page404(); // Это если не существует файла с классом
}
}
}

if(empty($ctrlrPath))
{
self::page404(); // Если запрос не подошёл не одному маршруту
}
}


/**
* 404-я страница
*/

public static function page404()
{
http_response_code(404);
require_once('page404.php');
exit;
}

}


/**
* Создаём маршруты
*
* 1 параметр - шаблон регулярного выражения для подключения контроллера
* и вызова действия
*
* 2 параметр - шаблон регулярного выражения для передаваемых параметров
* 3 параметр - имя контроллера соответствующего маршруту
* 4 параметр - имя действия соответствующего маршруту
*/

Route::set('^numbers$', 'chars=[0-9]{1,3}&min=[0-9]&max=[0-9]', 'numbers', 'index');
Route::set('^$', '^$', 'standart', 'index'); // Маршрут по умолчанию

/**
* Запуск маршрутизации
*/

Route::start($_SERVER['REQUEST_URI']);


И если не сложно уделить немного времени, подскажите как логика должна развиваться дальше? Вот создал я объект контроллера, вызвал его метод, передал в него параметр(или не передал), а дальше? Прочитал море всего про MVC и это только путаницу создало, одни статьи слишком для меня сложные, в других напротив всё упрощено до уровня роутинга на switch'e. Не пойму как с видами например работать, виды это вообще просто html шаблоны, или это класс такой, вид, и как всё взаимодействует? Объясните на пальцах, по пунктам, это передаём туда то - потому то, подключаем то-то, в таком духе.)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.