Не понятно что происходит, Зачем используем explode..., объясните код по шагам , общий понимаю роутинг для чего но код не понятно . PHP: class Route { static function start() { $controller_name = 'Main'; $action_name = 'index'; $routes = explode('/', $_SERVER['REQUEST_URI']); if ( !empty($routes[1]) ) { $controller_name = $routes[1]; } if ( !empty($routes[2]) ) { $action_name = $routes[2]; } $model_name = 'Model_'.$controller_name; $controller_name = 'Controller_'.$controller_name; $action_name = 'action_'.$action_name; $model_file = strtolower($model_name).'.php'; $model_path = "application/models/".$model_file; if(file_exists($model_path)) { include "application/models/".$model_file; } $controller_file = strtolower($controller_name).'.php'; $controller_path = "application/controllers/".$controller_file; if(file_exists($controller_path)) { include "application/controllers/".$controller_file; } else { /* правильно было бы кинуть здесь исключение, */ Route::ErrorPage404(); } $controller = new $controller_name; $action = $action_name; if(method_exists($controller, $action)) { $controller->$action(); } else { Route::ErrorPage404(); } } function ErrorPage404() { $host = 'http://'.$_SERVER['HTTP_HOST'].'/'; header('HTTP/1.1 404 Not Found'); header("Status: 404 Not Found"); header('Location:'.$host.'404'); } }
Ровно для того, как описано в документации - https://php.ru/manual/function.explode.html - чтобы разбить строку на части по слэшу, в данном случае. Первая часть считается именем контроллера и модели, вторая - именем метода контроллера. Потом соответствующие файлы подключаются с помощью include(), создается объект контроллера и вызывается метод в $action - имя метода Если нет файла или нет метода, вызывается ошибка 404.
@Sergey_php, последний метод – полный птец – где вы ЭТО взяли? Что касается первого, то вот именно что нужно было пробросить исключение, а если вы этого не делаете и ничего подобного не происходит внутри вызываемого метода, то это тоже полный птец.
@Sergey_php если адрес site.ru/a/b, то массив $routes примет такой вид Код (Text): [ 0 => 'site.ru', 1 => 'a', 2 => 'b' ]
@Sergey_php, а писали, что знаете php и ооп. explode разбивает строку на части. В $_SERVER["REQEUST_URI"] что-то вроде "/controller/action", после explode мы получаем массив PHP: [ 0 => '', 1 => 'controller',2 => 'action' ] @[vs], там нету site.ru, в $_SERVER["REQEUST_URI"].
Да знаю что explode делает просто не понял зачем это там, $_SERVER["REQEUST_URI"] здесь request_url какая ссылка должен быть ?
обычно такая /controller/action примеры выше давали https://php.ru/forum/threads/routing-v-php-objasnenie.60084/#post-486205
@Sergey_php в $_SERVER["REQEUST_URI"] автоматически будет URL когда попытаешься открыть какую-либо страницу, при этом должны существовать контроллер с соответствующим именем и методом. Чтобы роутинг работал, все запросы к домену должны перенаправляться на index.php, это можно сделать с помощью .htaccess.
"Знаю php" подразумевает, что назначение переменной $_SERVER известно, где посмотреть, какие в этом массиве элементы и для чего нужны - тоже известно. $_SERVER["REQUEST_URI"] - самый используемый элемент этого суперглобального массива