PHP Classes

File: src/index.php

Recommend this page to a friend!
  Classes of Rodrigo Faustino   FastAPI   src/index.php   Download  
File: src/index.php
Role: Example script
Content type: text/plain
Description: Example script
Class: FastAPI
Create an API from controllers' PHPDoc comments
Author: By
Last change:
Date: 15 hours ago
Size: 2,091 bytes
 

Contents

Class file image Download
<?php
namespace Fast\Api;

use
Fast\Api\Http\HttpHeader;
use
Fast\Api\Rotas\DocBlockRouter;

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

HttpHeader::adicionarCabecalhos();

if (
$_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
   
http_response_code(204);
    exit();
}

$metodoHttp = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];

$roteador = new DocBlockRouter();

$caminhoControladores = __DIR__ . '/../src/Controllers';
$namespaceBase = 'Fast\\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;
}