Laravel.Education
Acme Inc.

Como Construir um Roteador PHP Simples Sem Framework: Um Guia para Iniciantes

08/08/2025

tags:

Neste guia, vamos explorar como construir um roteador PHP simples sem a necessidade de um framework completo. Um roteador é essencial para direcionar solicitações HTTP para os controladores corretos em sua aplicação, proporcionando URLs limpas e amigáveis para SEO.

Benefícios de Usar um Roteador

  • URLs limpas e amigáveis para SEO
  • Melhor organização do código
  • Facilidade de manutenção
  • Maior segurança

Estrutura do Projeto

Primeiro, vamos definir uma estrutura de projeto organizada:

meu-projeto/
├── public/
│   ├── index.php
│   └── .htaccess
├── src/
│   ├── Roteador.php
│   └── Controladores/
│       ├── HomeController.php
│       └── UsuarioController.php
└── views/
    └── home.php

Criando a Classe Roteador

Aqui está um exemplo básico de uma classe Roteador:

<?php
namespace App;

class Roteador
{
    private array $rotas = [];

    public function get(string $caminho, callable|array $callback): void
    {
        $this->rotas['GET'][$caminho] = $callback;
    }

    public function post(string $caminho, callable|array $callback): void
    {
        $this->rotas['POST'][$caminho] = $callback;
    }

    public function resolver(): mixed
    {
        $metodo = $_SERVER['REQUEST_METHOD'];
        $caminho = $_SERVER['REQUEST_URI'] ?? '/';
        $caminho = explode('?', $caminho)[0];

        $callback = $this->rotas[$metodo][$caminho] ?? null;

        if ($callback === null) {
            http_response_code(404);
            return "404 Não Encontrado";
        }

        if (is_array($callback)) {
            [$classe, $metodo] = $callback;
            $controlador = new $classe();
            return $controlador->$metodo();
        }

        return $callback();
    }
}

Configurando o Ponto de Entrada

O arquivo public/index.php será nosso ponto de entrada:

<?php

require_once __DIR__ . '/../vendor/autoload.php';

use App\Roteador;
use App\Controladores\HomeController;
use App\Controladores\UsuarioController;

$roteador = new Roteador();

// Definindo rotas
$roteador->get('/', [HomeController::class, 'index']);
$roteador->get('/sobre', [HomeController::class, 'sobre']);
$roteador->get('/usuarios', [UsuarioController::class, 'index']);

// Resolvendo a requisição atual
echo $roteador->resolver();

Considerações de Segurança

É crucial validar e sanitizar entradas e implementar cabeçalhos de segurança:

header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");
header("X-XSS-Protection: 1; mode=block");

Conclusão

Construir seu próprio roteador PHP é uma ótima maneira de entender o funcionamento interno dos frameworks modernos. Este roteador simples oferece uma base sólida que pode ser expandida conforme as necessidades do seu projeto.

Próximos Passos

  • Adicionar suporte a middleware
  • Implementar grupos de rotas
  • Adicionar rotas nomeadas
  • Implementar cache para melhor desempenho