gortonsd/router

A lightweight PHP router library with automatic controller discovery, route registration via docblock annotations, and intelligent route caching

Maintainers

Package info

github.com/gortonsd/router

pkg:composer/gortonsd/router

Fund package maintenance!

gortonsd

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2025-08-20 12:23 UTC

This package is auto-updated.

Last update: 2026-03-20 13:27:02 UTC


README

PHP Router Library

Overview

Router is a lightweight PHP router class that automatically discovers controllers, registers routes using docblock annotations, and caches routes for fast lookup. Designed for easy integration into your own projects or for use by other developers.

Features

  • Automatic controller discovery in a specified folder
  • Route registration via @url docblock annotation
  • Supports HTTP methods: get, post (extendable)
  • File-based route caching with configurable minimum cache age
  • Simple API for dispatching requests

Controller Requirements

  • Each controller must have a docblock with @url /path
  • Implement methods named get(), post(), etc. for HTTP actions

Example:

/**
 * @url /example
 */
class ExampleController {
	public function get() {
		echo "GET: Hello from ExampleController!";
	}
	public function post() {
		echo "POST: You posted to ExampleController!";
	}
}

Usage

require_once 'vendor/autoload.php';

use gortonsd\Router\Router;

$router = new Router();
$router->loadControllers(3600); // Optional: set minimum cache age to 1 hour (3600 seconds)
$router->run($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);

Route Caching

  • Routes are cached to a file (routes.cache) for fast lookup.
  • Cache is rebuilt if any controller changes and the cache file is older than the minimum age.
  • You can adjust the minimum cache age by passing a value (in seconds) to loadControllers().

Installation

Via Composer (Recommended)

composer require gortonsd/router

Manual Installation

Copy the src/Router.php file and your controllers into your project. Use Composer's autoload or require the files manually.

License

MIT