celiovmjr/simplerouter

A lightweight, enterprise-grade PHP router with validation, middleware, and DDD principles

Installs: 133

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/celiovmjr/simplerouter

3.0.0 2026-01-12 13:09 UTC

This package is auto-updated.

Last update: 2026-02-12 13:24:23 UTC


README

PHP Version License Tests Code Coverage

A lightweight, enterprise-grade PHP router with Domain-Driven Design (DDD) architecture, featuring powerful validation, middleware pipeline, and zero dependencies.

// It's this simple
$router = new Router();

$router->post('/users', function(Request $request) {
    $validated = $request->validated([
        'name' => 'required|min:3|max:50',
        'email' => 'required|email',
        'age' => 'required|integer|min:18'
    ]);
    
    return Response::json($validated, 201);
});

$router->run();

โœจ Features

  • ๐ŸŽฏ Clean Architecture - Domain-Driven Design (DDD) with clear separation of concerns
  • โšก Zero Dependencies - Pure PHP 8.2+, no external packages required
  • ๐Ÿ›ก๏ธ Type Safety - Full type hints with strict types enabled
  • ๐Ÿ”’ Built-in Validation - 17+ validation rules with custom messages
  • ๐Ÿ”„ Middleware Pipeline - Powerful middleware system with built-in CORS, Rate Limiting, and Logging
  • ๐ŸŽจ Flexible Routing - RESTful routes, route groups, named routes, and multiple HTTP methods
  • ๐Ÿ“ Smart Parameters - Type-safe route parameters (int, uuid, slug, alpha, etc.)
  • ๐Ÿงช 100+ Tests - Comprehensive test suite with PHPUnit
  • ๐Ÿ“– Rich Documentation - Complete examples and API reference

๐Ÿ“ฆ Installation

composer require celiovmjr/simplerouter

Or download the latest release and include via autoloader:

require_once 'vendor/autoload.php';

๐Ÿš€ Quick Start

Basic Route

use SimpleRouter\Application\Router;
use SimpleRouter\Application\Http\{Request, Response};

$router = new Router();

$router->get('/hello/{name}', function(Request $request) {
    $name = $request->input('name');
    return Response::json(['message' => "Hello, {$name}!"]);
});

$router->run();

With Validation

$router->post('/register', function(Request $request) {
    $validated = $request->validated([
        'name' => 'required|alpha|min:3|max:50',
        'email' => 'required|email|onError("Please provide a valid email")',
        'password' => 'required|min:8',
        'age' => 'required|integer|min:18|onError("You must be 18 or older")'
    ]);
    
    // Create user...
    
    return Response::json([
        'message' => 'User registered successfully',
        'user' => $validated
    ], 201);
});

With Middleware

use SimpleRouter\Application\Middleware\Builtin\{
    CorsMiddleware,
    RateLimitMiddleware,
    LoggingMiddleware
};

$router->group([
    'prefix' => '/api',
    'middleware' => [
        CorsMiddleware::production(['https://app.example.com']),
        RateLimitMiddleware::api(),
        LoggingMiddleware::production(__DIR__ . '/logs/api.log')
    ]
], function($router) {
    $router->get('/users', [UserController::class, 'index']);
    $router->post('/users', [UserController::class, 'store']);
});

๐Ÿ“š Documentation

๐Ÿ›ฃ๏ธ Routing

// HTTP Methods
$router->get('/users', $handler);
$router->post('/users', $handler);
$router->put('/users/{id}', $handler);
$router->delete('/users/{id}', $handler);

// Typed Parameters
$router->get('/users/{id:int}', $handler);
$router->get('/posts/{uuid:uuid}', $handler);
$router->get('/blog/{slug:slug}', $handler);

// Route Groups
$router->group(['prefix' => '/api/v1'], function($router) {
    $router->get('/users', $handler);
});

// Named Routes
$router->get('/dashboard', $handler)->withName('dashboard');
$url = $router->route('dashboard');

โ†’ Full Routing Documentation

โœ… Validation

$validated = $request->validated([
    'email' => 'required|email',
    'age' => 'required|integer|min:18|max:120',
    'username' => 'required|alphanumeric|min:3|max:20',
    'role' => 'required|in:admin,user,guest'
]);

17+ Built-in Rules:

  • required, email, url, uuid
  • integer, numeric, boolean, alpha, alphanumeric
  • min, max, in, regex, date

โ†’ Full Validation Documentation

๐Ÿ›ก๏ธ Middleware

Built-in Middleware

// CORS
CorsMiddleware::production(['https://app.example.com']);

// Rate Limiting
RateLimitMiddleware::api();        // 100 req/min
RateLimitMiddleware::auth();       // 5 req/min
RateLimitMiddleware::perUser(1000, 60);

// Logging
LoggingMiddleware::production('/var/log/api.log');
LoggingMiddleware::debug('/var/log/debug.log');

Custom Middleware

class AuthMiddleware implements Middleware
{
    public function handle(Request $request, Closure $next): Response
    {
        // Authentication logic
        return $next($request);
    }
}

โ†’ Full Middleware Documentation

๐Ÿ“ฅ๐Ÿ“ค Request & Response

Request

// Input
$request->input('name');
$request->all();
$request->only(['name', 'email']);
$request->validated($rules);

// Headers & Query
$request->header('Authorization');
$request->query('page', 1);

// Request Info
$request->method();
$request->ip();
$request->path();

Response

// JSON
Response::json(['data' => 'value'], 200);

// HTML
Response::html('<h1>Hello</h1>');

// Redirect
Response::redirect('/dashboard');

// Fluent Interface
Response::make('OK')
    ->withStatus(201)
    ->withHeader('X-Custom', 'Value');

โ†’ Full Request/Response Documentation

๐Ÿงช Testing

# Run all tests
./run-tests.sh

# Run specific suite
./run-tests.sh router
./run-tests.sh validation

# Generate coverage
./run-tests.sh coverage

100+ Tests covering:

  • Router functionality
  • Validation rules
  • Request/Response handling
  • Middleware pipeline

โ†’ Full Testing Documentation

๐Ÿ—๏ธ Architecture

SimpleRouter follows Domain-Driven Design (DDD):

src/
โ”œโ”€โ”€ Domain/              # Business logic
โ”‚   โ”œโ”€โ”€ Contracts/       # Interfaces (Middleware, ValidationRule, Validator)
โ”‚   โ”œโ”€โ”€ Entities/        # Domain entities (Route, RouteCollection)
โ”‚   โ””โ”€โ”€ ValueObjects/    # Value objects (HttpMethod, Uri)
โ””โ”€โ”€ Application/         # Application logic
    โ”œโ”€โ”€ Router.php       # Main router
    โ”œโ”€โ”€ Http/            # Request/Response
    โ”œโ”€โ”€ Validation/      # Validation system
    โ”‚   โ”œโ”€โ”€ RequestValidator.php
    โ”‚   โ”œโ”€โ”€ RuleParser.php
    โ”‚   โ”œโ”€โ”€ ValidationResult.php
    โ”‚   โ””โ”€โ”€ Rules/       # Individual rule files (17 rules)
    โ”œโ”€โ”€ Middleware/      # Middleware pipeline
    โ”‚   โ”œโ”€โ”€ MiddlewarePipeline.php
    โ”‚   โ””โ”€โ”€ Builtin/     # CorsMiddleware, RateLimitMiddleware, LoggingMiddleware
    โ””โ”€โ”€ Exceptions/      # Custom exceptions

โ†’ Full Architecture Documentation

Design Principles:

  • โœ… SOLID principles
  • โœ… Clean Code practices
  • โœ… DDD architecture (Domain/Application layers)
  • โœ… Type safety (PHP 8.2+)
  • โœ… Zero global state
  • โœ… Interface-based design
  • โœ… 17 individual validation rule files
  • โœ… 3 production-ready built-in middleware

๐Ÿ“– Examples

API with Database

$router->get('/users', function(Request $request) {
    $page = $request->query('page', 1);
    $limit = $request->query('limit', 10);
    
    $users = User::paginate($page, $limit);
    
    return Response::json([
        'data' => $users,
        'page' => $page,
        'total' => User::count()
    ]);
});

Authentication

$router->post('/login', function(Request $request) {
    $validated = $request->validated([
        'email' => 'required|email',
        'password' => 'required|min:8'
    ]);
    
    $token = Auth::attempt($validated);
    
    return Response::json([
        'token' => $token,
        'expires_in' => 3600
    ]);
});

File Upload

$router->post('/upload', function(Request $request) {
    $file = $request->file('document');
    
    if ($file && $file->isValid()) {
        $path = $file->store('uploads');
        return Response::json(['path' => $path], 201);
    }
    
    return Response::json(['error' => 'Invalid file'], 400);
});

โ†’ More Examples

๐Ÿค Contributing

Contributions welcome! Please read CONTRIBUTING.md for guidelines.

๐Ÿ“„ License

MIT License - see LICENSE file.

๐Ÿ™ Acknowledgments

  • Built with โค๏ธ by Celio Junior
  • Inspired by Laravel and Symfony
  • Architecture based on DDD principles

๐Ÿ“ž Support

Made with โค๏ธ and PHP 8.2+