Будівництво ефективного роутора на чистому PHP

pic

Створення ефективного роута на чистому PHP

Маршрутизація є критично важливим аспектом будь-якого веб-додатку. Хоча фреймворки, такі як Laravel, пропонують складні системи маршрутизації, іноді вам потрібна гнучкість і контроль над рішенням на чистому PHP. Ця стаття демонструє, як створити надійний і ефективний роутер на чистому PHP, спеціально розроблений для експертів.

Код джерела можна знайти тут: https://github.com/khouloudhaddad/php-native-router/tree/main

📂Структура проекту

php-native-router/  
├── controllers/  
│ ├── HomeController.php  
│ ├── UserController.php  
├── Router.php  
├── index.php

Кожен компонент виконує конкретну роль:

  • index.php: Точка входу в додаток, яка ініціалізує і обробляє маршрути.
  • Router.php: Основна логіка маршрутизації для обробки запитів.
  • Controllers: Специфічна логіка для різних частин додатку (наприклад, HomeController, UserController).

📎 Реалізація роутера

Клас Router є основою додатку, що дозволяє здійснювати динамічне співставлення маршруту та виконання. Ось його реалізація:

routes[] = compact('method', 'path', 'handler');  
 }  

 public function dispatch(string $requestUri, string $requestMethod): void {  
 foreach ($this->routes as $route) {  
 $params = [];  
 if ($route['method'] === strtoupper($requestMethod) && $this->match($route['path'], $requestUri, $params)) {  
 call_user_func_array($route['handler'], $params);  
 return;  
 }  
 }  
 // Обробка 404  
 http_response_code(404);  
 echo "404 Не знайдено";  
 }  

 private function match(string $routePath, string $requestUri, array &$params): bool {  
 $routePattern = preg_replace('/\{([\w]+)\}/', '(?P<$1>[^/]+)', $routePath);  
 $routePattern = '#^' . $routePattern . '$#';  

 if (preg_match($routePattern, $requestUri, $matches)) {  
 $params = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);  
 return true;  
 }  
 return false;  
 }  
}

💡 Визначення маршрутів

Маршрути визначаються у файлі index.php, де ми відображаємо певні методи запитів і URI на обробники.

add('GET', '/', [HomeController::class, 'index']);  
$router->add('GET', '/user/{id}', [UserController::class, 'show']);  
$router->add('POST', '/user', [UserController::class, 'create']);  

// Обробка запиту  
$requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);  
$requestMethod = $_SERVER['REQUEST_METHOD'];  

$router->dispatch($requestUri, $requestMethod);

🔨 Створення контролерів

Контролери інкапсулюють логіку додатку. Ось як реалізовані HomeController та UserController:

  • HomeController.php

Необов'язкові параметри: Розширте шаблони маршрутів для обробки необов'язкових параметрів або шаблонів.

Дотримуючись цього посібника, ви створите надійну та гнучку систему маршрутизації на чистому PHP. Це ідеальне рішення для невеликих проєктів або як основа для вивчення складніших концепцій маршрутизації.

✍️ Поділіться своїми думками або запитаннями в коментарях нижче!

Перекладено з: Building an Effective Native PHP Router

Leave a Reply

Your email address will not be published. Required fields are marked *