PHP code example of edgvi10 / router

1. Go to this page and download the library: Download edgvi10/router 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/ */

    

edgvi10 / router example snippets




DGVI10\Controllers\Router\RouterController;

// Criar instância do router
$router = new RouterController([
    "basePath" => "",           // Base path da aplicação (ex: "/api" ou "/v1")
    "useJson" => true,          // Retornar JSON por padrão
    "debug" => false,           // Modo debug (exibe stack trace)
    "logErrors" => true,        // Salvar logs de erros
    "logPath" => __DIR__ . "/logs/"  // Diretório dos logs
]);

// Definir rotas
$router->get('/', function ($req, $res) {
    $res->withJson(["message" => "Welcome to the API"]);
});

$router->get('/hello/:name', function ($req, $res, $params) {
    $res->withJson([
        "message" => "Hello, " . $params['name'] . "!"
    ]);
});

// Executar o router
$router->run();

// GET
$router->get('/users', function ($req, $res) {
    $res->withJson(["users" => []]);
});

// POST
$router->post('/users', function ($req, $res) {
    $data = $req->getBody();
    $res->withJson(["created" => true, "data" => $data], 201);
});

// PUT
$router->put('/users/:id', function ($req, $res, $params) {
    $id = $params['id'];
    $data = $req->getBody();
    $res->withJson(["updated" => true, "id" => $id]);
});

// PATCH
$router->patch('/users/:id', function ($req, $res, $params) {
    $res->withJson(["patched" => true]);
});

// DELETE
$router->delete('/users/:id', function ($req, $res, $params) {
    $res->withJson(["deleted" => true]);
});

// OPTIONS (útil para CORS)
$router->options('/users', function ($req, $res) {
    $res->setHeader("Allow", "GET, POST, PUT, DELETE, OPTIONS");
    $res->withJson(["methods" => ["GET", "POST", "PUT", "DELETE"]]);
});

// Parâmetro simples
$router->get('/users/:id', function ($req, $res, $params) {
    $userId = $params['id'];
    $res->withJson(["userId" => $userId]);
});

// Múltiplos parâmetros
$router->get('/users/:userId/posts/:postId', function ($req, $res, $params) {
    $res->withJson([
        "userId" => $params['userId'],
        "postId" => $params['postId']
    ]);
});

// Parâmetro com regex
$router->get('/users/:id([0-9]+)', function ($req, $res, $params) {
    // Aceita apenas números
    $res->withJson(["userId" => $params['id']]);
});

$router->get('/posts/:slug([a-z0-9-]+)', function ($req, $res, $params) {
    // Aceita apenas letras minúsculas, números e hífens
    $res->withJson(["slug" => $params['slug']]);
});

use EDGVI10\Controllers\Router\Middlewares;

// Grupo de rotas da API v1
$router->group('/api/v1', function($router) {
    
    $router->get('/users', function ($req, $res) {
        $res->withJson(["users" => []]);
    });
    
    $router->get('/posts', function ($req, $res) {
        $res->withJson(["posts" => []]);
    });
    
}, [Middlewares::cors(), Middlewares::jsonOnly()]);

// Grupo de rotas protegidas
$router->group('/admin', function($router) {
    
    $router->get('/dashboard', function ($req, $res) {
        $res->withJson(["message" => "Admin dashboard"]);
    });
    
    $router->get('/users', function ($req, $res) {
        $res->withJson(["users" => ["admin1", "admin2"]]);
    });
    
}, [Middlewares::auth()]);

// Grupos aninhados
$router->group('/api', function($router) {
    
    $router->group('/v1', function($router) {
        $router->get('/test', function ($req, $res) {
            $res->withJson(["version" => "v1"]);
        });
    });
    
    $router->group('/v2', function($router) {
        $router->get('/test', function ($req, $res) {
            $res->withJson(["version" => "v2"]);
        });
    });
    
});

use EDGVI10\Controllers\Router\Middlewares;

// CORS para todas as rotas
$router->addMiddleware(Middlewares::cors());

// Log de todas as requisições
$router->addMiddleware(function($req, $res, $params) {
    error_log("Request: " . $req->getMethod() . " " . $req->getRoute());
    return true; // continua para próxima rota
});

// Autenticação em rota específica
$router->get('/protected', function ($req, $res) {
    $res->withJson(["message" => "Protected content"]);
}, [Middlewares::auth()]);

// Múltiplos middlewares
$router->post('/admin/users', function ($req, $res) {
    $res->withJson(["created" => true]);
}, [
    Middlewares::auth(),
    Middlewares::adminOnly(),
    Middlewares::rateLimit(100)
]);

// CORS
Middlewares::cors([
    'origin' => '*',
    'methods' => 'GET, POST, PUT, DELETE, OPTIONS',
    'headers' => 'Content-Type, Authorization'
]);

// Autenticação Bearer Token
Middlewares::auth(function($token, $request) {
    // Validar token no banco de dados
    if ($token === "seu-token-valido") {
        return ["id" => 1, "name" => "User"];
    }
    return false;
});

// API Key
Middlewares::apiKey('X-API-Key', function($key, $request) {
    return $key === "sua-api-key";
});

// Rate Limiting
Middlewares::rateLimit(100, 3600); // 100 requisições por hora

// Apenas JSON
Middlewares::jsonOnly();

// Validação de campos
Middlewares::validateFields(['name', 'email', 'password']);

// Admin apenas
Middlewares::adminOnly();

$router->addMiddleware(function($req, $res, $params) {
    // Verificar IP
    $allowedIPs = ['127.0.0.1', '192.168.1.100'];
    $clientIP = $_SERVER['REMOTE_ADDR'];
    
    if (!in_array($clientIP, $allowedIPs)) {
        $res->withError("Access denied", 403);
        return false; // Para a execução
    }
    
    return true; // Continua para a próxima rota
});

$router->post('/example', function ($req, $res) {
    // Método HTTP
    $method = $req->getMethod(); // GET, POST, etc.
    
    // Rota atual
    $route = $req->getRoute(); // /example
    
    // Host completo
    $host = $req->getHost(); // https://example.com
    
    // Body da requisição (JSON)
    $body = $req->getBody(); // Array com dados JSON
    
    // Query parameters (?name=value)
    $query = $req->getQuery(); // Array
    $name = $req->getQuery('name'); // Valor específico
    
    // Headers
    $headers = $req->getHeaders(); // Array de headers
    $contentType = $req->getHeader('Content-Type');
    
    // User Agent
    $userAgent = $req->getUserAgent();
    
    // Token de autenticação (Bearer)
    $token = $req->getAuth();
    
    // Autenticação customizada
    $customAuth = $req->getAuthencation('X-Custom-Token');
    
    $res->withJson(["received" => $body]);
});

// JSON Response
$res->withJson(["success" => true], 200);

// Error Response
$res->withError("Not found", 404);
$res->withError("Unauthorized", 401);
$res->withError("Bad request", 400);

// HTML Response
$res->withHtml("<h1>Hello World</h1>", 200);

// Download de arquivo
$res->withDownload("/path/to/file.pdf", "documento.pdf");

// Status customizado
$res->withStatus(204); // No Content

// Adicionar headers
$res->setHeader("X-Custom-Header", "Value");
$res->setHeader("Cache-Control", "no-cache");

// Múltiplos headers
$res->setHeader("X-Custom", "Value")
    ->setHeader("X-Another", "Value2")
    ->withJson(["data" => "value"]);



DGVI10\Controllers\Router\RouterController;
use EDGVI10\Controllers\Router\Middlewares;

$router = new RouterController([
    "basePath" => "/api/v1",
    "useJson" => true,
    "debug" => true
]);

// Middleware global de CORS
$router->addMiddleware(Middlewares::cors());

// Rotas públicas
$router->post('/auth/login', function ($req, $res) {
    $body = $req->getBody();
    
    // Validar credenciais...
    if ($body['email'] === '[email protected]' && $body['password'] === 'secret') {
        $res->withJson([
            "token" => "generated-token-here",
            "user" => ["id" => 1, "name" => "User"]
        ]);
    } else {
        $res->withError("Invalid credentials", 401);
    }
});

// Grupo de rotas protegidas
$router->group('/users', function($router) {
    
    // Listar usuários
    $router->get('', function ($req, $res) {
        $res->withJson(["users" => [
            ["id" => 1, "name" => "John Doe"],
            ["id" => 2, "name" => "Jane Doe"]
        ]]);
    });
    
    // Buscar usuário específico
    $router->get('/:id([0-9]+)', function ($req, $res, $params) {
        $id = $params['id'];
        // Buscar no banco...
        $res->withJson(["id" => $id, "name" => "John Doe"]);
    });
    
    // Criar usuário
    $router->post('', function ($req, $res) {
        $data = $req->getBody();
        // Salvar no banco...
        $res->withJson(["created" => true, "id" => 3], 201);
    });
    
    // Atualizar usuário
    $router->put('/:id', function ($req, $res, $params) {
        $id = $params['id'];
        $data = $req->getBody();
        // Atualizar no banco...
        $res->withJson(["updated" => true]);
    });
    
    // Deletar usuário
    $router->delete('/:id', function ($req, $res, $params) {
        $id = $params['id'];
        // Deletar do banco...
        $res->withJson(["deleted" => true]);
    });
    
}, [
    Middlewares::auth(function($token) {
        return $token === "generated-token-here";
    })
]);

$router->run();

$router->group('/api', function($router) {
    
    $router->post('/data', function ($req, $res) {
        $res->withJson(["data" => "protected data"]);
    });
    
}, [
    Middlewares::auth(),
    Middlewares::rateLimit(100, 3600), // 100 req/hora
    Middlewares::jsonOnly()
]);

$router->get('/', function ($req, $res) {
    $html = file_get_contents(__DIR__ . '/views/home.html');
    $res->withHtml($html);
});

$router->get('/download/report', function ($req, $res) {
    $res->withDownload(__DIR__ . '/files/report.pdf', 'relatorio-2025.pdf');
});