Re:Vue

Router クラスは、HTTPリクエストを解析し、登録されたルートに基づいて対応するコールバックを実行する。GET, POST, PUT, DELETE メソッドに対応しており、簡単にルート登録と解決が可能。

1. コード

<?php

namespace app\aura\routes;

use app\aura\https\Request;

class Router {
    public Request $request;
    protected array $routes = [];

    public function __construct(Request $request) {
        $this->request = $request;
    }

    public function get($path, $callback) {
        $this->routes['get'][$path] = $callback;
    }

    public function post($path, $callback) {
        $this->routes['post'][$path] = $callback;
    }

    public function put($path, $callback) {
        $this->routes['put'][$path] = $callback;
    }

    public function delete($path, $callback) {
        $this->routes['delete'][$path] = $callback;
    }

    public function resolve() {
        $path   = $this->request->getPath();
        $method = $this->request->getMethod();
        $callback = $this->routes[$method][$path] ?? false;
        
        if ($callback === false) {
            echo "Not found";
            exit;
        }

        echo call_user_func($callback);
    }
}

2. コード説明

  • プロパティ
    • $request : 現在の HTTP リクエスト
    • $routes : 登録されたルート一覧(HTTPメソッドごと)
  • メソッド
    • get($path, $callback) : GET ルート登録
    • post($path, $callback) : POST ルート登録
    • put($path, $callback) : PUT ルート登録
    • delete($path, $callback) : DELETE ルート登録
    • resolve() : 現在のリクエストを解決して対応するコールバックを実行
    • 未登録ルートの場合は "Not found" を表示して処理終了
    • 必要に応じてカスタマイズし、404/500 ページなどにリダイレクト可能

3. 使い方 / 利用例

  • use app\aura\routes\Router; でクラスを読み込む。
use app\aura\routes\Router;
use app\aura\https\Request;

$request = new Request();
$router  = new Router($request);

// GETルート登録
$router->get('home', function() {
    return 'ホームページです';
});

// POSTルート登録
$router->post('signup', function() {
    return 'サインアップ処理';
});

// 現在のリクエストに応じたルートを解決
$router->resolve();