<?php 
namespace Backend\Api; 
use Backend\Api\Rotas\Router; 
use Backend\Api\Http\HttpHeader; 
use Backend\Api\Rotas\AttributeRouter; 
 
require_once '../vendor/autoload.php'; 
 
HttpHeader::setDefaultHeaders(); 
 
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { 
    http_response_code(204); 
    exit(); 
} 
 
 
$roteador = new AttributeRouter(); 
 
$metodoHttp = $_SERVER['REQUEST_METHOD']; 
$uri = $_SERVER['REQUEST_URI']; 
 
 
$caminhoControladores = __DIR__ . '/../src/Controllers'; 
$namespaceBase = 'Backend\\Api\\Controllers'; 
 
$classesControladoras = obterClassesControladoras($caminhoControladores, $namespaceBase); 
 
foreach ($classesControladoras as $classeControladora) { 
    $roteador->passaControlador($classeControladora); 
} 
 
$roteador->resolve($metodoHttp, $uri); 
 
/** 
 * Função para obter todas as classes de controladores no diretório Controllers 
 *  
 * @param string $caminhoControladores Caminho para o diretório de controladores 
 * @param string $namespaceBase Namespace base dos controladores 
 * @return array Lista de nomes completos das classes de controladores 
 */ 
    function obterClassesControladoras($caminhoControladores, $namespaceBase) { 
        $classesControladoras = []; 
 
        $iterador = new \RecursiveIteratorIterator( 
            new \RecursiveDirectoryIterator($caminhoControladores) 
        ); 
 
        foreach ($iterador as $arquivo) { 
            if ($arquivo->isFile() && $arquivo->getExtension() === 'php') { 
                $caminhoRelativo = substr($arquivo->getPathname(), strlen($caminhoControladores)); 
                $caminhoRelativo = ltrim($caminhoRelativo, DIRECTORY_SEPARATOR); 
                $caminhoRelativo = substr($caminhoRelativo, 0, -4); 
                $parteNomeClasse = str_replace(DIRECTORY_SEPARATOR, '\\', $caminhoRelativo); 
                $nomeClasse = $namespaceBase . '\\' . $parteNomeClasse; 
 
            if (!class_exists($nomeClasse)) { 
                require_once $arquivo->getPathname(); 
            } 
            if (class_exists($nomeClasse)) { 
                $classesControladoras[] = $nomeClasse; 
            } 
        } 
    } 
 
    return $classesControladoras; 
} 
 
 |