PHP code example of chrispo / routex-php

1. Go to this page and download the library: Download chrispo/routex-php library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

chrispo / routex-php example snippets




declare(strict_types=1);

use Chrispo\RouterPhp\Response;
use Chrispo\RouterPhp\Router;

$router = new Router();

$router->get('/', function (Request $req, Response $res): void {
    $res->json(['message' => 'Hello World']);
});

$router->get('/users/:id', function (Request $req, Response $res): void {
    $res->json(['id' => $req->param('id')]);
});

$router->run();



declare(strict_types=1);

$router = new Router();




use Chrispo\RouterPhp\Request;
use Chrispo\RouterPhp\Response;
use App\Controllers\UserController;
use App\Middleware\AuthMiddleware;

$router->use(new CorsMiddleware());

$router->get('/users', [UserController::class, 'index']);
$router->post('/users', [UserController::class, 'store']);

$router->group('/admin', function (Router $r): void {
    $r->use(new AuthMiddleware());
    $r->get('/dashboard', [AdminController::class, 'index']);
});

$router->get('/users',       $handler);   // GET
$router->post('/users',      $handler);   // POST
$router->put('/users/:id',   $handler);   // PUT
$router->patch('/users/:id', $handler);   // PATCH
$router->delete('/users/:id',$handler);   // DELETE
$router->options('/users',   $handler);   // OPTIONS

// Registra el mismo handler para todos los métodos
$router->any('/ping', $handler);

$router->get('/users/:id', function (Request $req, Response $res): void {
    $id = $req->param('id');           // '42'
    $res->json(['id' => $id]);
});

// Múltiples parámetros
$router->get('/posts/:year/:month/:slug', function (Request $req, Response $res): void {
    $year  = $req->param('year');
    $month = $req->param('month');
    $slug  = $req->param('slug');
});

// GET /users?page=2&limit=5
$router->get('/users', function (Request $req, Response $res): void {
    $page  = (int) $req->query('page', '1');
    $limit = (int) $req->query('limit', '10');
});

$router->group('/api/v1', function (Router $r): void {
    $r->get('/products',     $listHandler);    // GET  /api/v1/products
    $r->post('/products',    $createHandler);  // POST /api/v1/products
    $r->get('/products/:id', $showHandler);    // GET  /api/v1/products/:id
});



declare(strict_types=1);

use Chrispo\RouterPhp\Middleware\MiddlewareInterface;
use Chrispo\RouterPhp\Request;
use Chrispo\RouterPhp\Response;

final class AuthMiddleware implements MiddlewareInterface
{
    public function handle(Request $request, Response $response, callable $next): void
    {
        $token = $request->header('Authorization');

        if (!str_starts_with($token, 'Bearer ')) {
            // Corta la cadena — el handler de la ruta no se ejecuta
            $response->status(401)->json(['error' => 'Unauthorized']);
            return;
        }

        $next($request, $response); // Continúa hacia el handler
    }
}

$router->use(new CorsMiddleware(), new LogMiddleware());

$router->get('/reports', function (Request $req, Response $res): void {
    $res->json(['reports' => []]);
})->middleware(new AuthMiddleware());

$router->group('/admin', function (Router $r): void {
    $r->use(new AuthMiddleware()); // Solo rutas /admin/*

    $r->get('/dashboard', $dashboardHandler);
    $r->get('/settings',  $settingsHandler);
});

$res->status(201)
    ->header('X-Request-Id', uniqid())
    ->json(['created' => true]);

$router->notFound(function (Request $req, Response $res): void {
    $res->status(404)->json([
        'error'   => 'Not Found',
        'message' => sprintf('"%s %s" no existe', $req->getMethod(), $req->getPath()),
    ]);
});

use Chrispo\RouterPhp\Exceptions\MethodNotAllowedException;

$router->methodNotAllowed(function (MethodNotAllowedException $e, Request $req, Response $res): void {
    $res->status(405)
        ->header('Allow', implode(', ', $e->getAllowedMethods()))
        ->json([
            'error'   => 'Method Not Allowed',
            'allowed' => $e->getAllowedMethods(),
        ]);
});

$router->onError(function (\Throwable $e, Request $req, Response $res): void {
    $res->status(500)->json([
        'error'   => 'Internal Server Error',
        'message' => $e->getMessage(),
    ]);
});
bash
composer 
bash
php -S localhost:8000
text
mi-proyecto/
├── public/
│   └── index.php          # Punto de entrada
├── src/
│   ├── Controllers/       # Lógica de cada recurso
│   │   └── UserController.php
│   ├── Middleware/        # Clases de middleware propias
│   │   ├── AuthMiddleware.php
│   │   └── CorsMiddleware.php
│   └── routes.php         # Definición de todas las rutas
├── vendor/
├── composer.json
└── .env
bash
php -S localhost:8000
bash
php vendor/bin/pest
bash
php vendor/bin/phpbench run benchmarks/ --report=aggregate