Skip to content

Router Package

HTTP router with parameter extraction.

Installation

bash
composer require lighthouse/router

Basic Usage

php
use Lighthouse\Router\Router;

$router = new Router();

$router->get('/', function () {
    return 'Home';
});

$router->post('/users', function () {
    return 'Create user';
});

HTTP Methods

php
$router->get('/path', $handler);
$router->post('/path', $handler);
$router->put('/path', $handler);
$router->patch('/path', $handler);
$router->delete('/path', $handler);
$router->options('/path', $handler);
$router->head('/path', $handler);

// Multiple methods
$router->match(['GET', 'POST'], '/path', $handler);

// All methods
$router->any('/path', $handler);

Route Parameters

php
$router->get('/users/{id}', function (string $id) {
    return "User: {$id}";
});

$router->get('/posts/{post}/comments/{comment}', function ($post, $comment) {
    return "Post {$post}, Comment {$comment}";
});

Route Groups

php
$router->group('/api', function ($router) {
    $router->get('/users', $handler);    // /api/users
    $router->get('/posts', $handler);    // /api/posts
});

// Nested groups
$router->group('/api', function ($router) {
    $router->group('/v1', function ($router) {
        $router->get('/users', $handler);  // /api/v1/users
    });
});

Named Routes

php
$router->get('/users/{id}', $handler)->name('users.show');

// Generate URL
$url = $router->url('users.show', ['id' => 123]);
// /users/123

Dispatching

php
use Lighthouse\Http\ServerRequest;

$request = ServerRequest::fromGlobals();

try {
    $match = $router->dispatch($request);

    $handler = $match->getHandler();
    $params = $match->getParameters();

} catch (RouteNotFoundException $e) {
    // 404
} catch (MethodNotAllowedException $e) {
    // 405
    $allowed = $e->getAllowedMethods();
}

Route Match

php
$match = $router->dispatch($request);

$match->getRoute();       // Route object
$match->getHandler();     // The handler
$match->getParameters();  // ['id' => '123']
$match->getParameter('id', 'default');

Released under the MIT License.