Files
2026-09-01 10:46:29 -03:00

5.4 KiB
Executable File

Ciclo de Vida da Aplicação SysCMS

Este documento detalha o fluxo de execução de uma requisição no SysCMS, desde a entrada no servidor até a resposta enviada ao usuário. Compreender este ciclo é fundamental para desenvolver módulos, middlewares e customizações.

1. Entrada (Entry Point)

Todas as requisições web são direcionadas para o arquivo public/index.php. Este arquivo é responsável por:

  1. Carregar o Autoloader do Composer: require __DIR__ . '/../vendor/autoload.php'.
  2. Instanciar a Aplicação: Cria uma nova instância de Kernel\Application.
  3. Executar a Aplicação: Chama o método $app->run().
// public/index.php
require __DIR__ . '/../vendor/autoload.php';
$app = new Kernel\Application();
$app->run();

2. Inicialização do Kernel (Bootstrapping)

Ao instanciar a classe Kernel\Application, o construtor dispara uma série de inicializações essenciais.

2.1. Carregamento do Ambiente

O helper load_env() é chamado para ler o arquivo .env e definir as variáveis de ambiente ($_ENV).

2.2. Inicialização da Sessão (initSession)

  • Configura o tempo de vida e caminho da sessão.
  • Otimiza o armazenamento usando /dev/shm (memória RAM) se disponível, para alta performance.
  • Gera ou valida o token CSRF ($_SESSION['_token']).
  • Define o idioma padrão da aplicação.

2.3. Container de Injeção de Dependência (initContainer)

  • Inicializa o PHP-DI (Container Builder).
  • Permite autowiring (resolução automática de dependências).
  • Carrega definições adicionais de config/container.php se existir.

2.4. Banco de Dados (initDatabase)

  • Inicializa o Illuminate/Database (Eloquent ORM).
  • Configura a conexão baseada nas variáveis do .env (DB_HOST, DB_DATABASE, etc.).
  • Inicializa o ORM para uso global (Capsule::bootEloquent()).

2.5. Template Engine (initTwig)

  • Inicializa o Twig.
  • Configura os diretórios de templates: app/templates e modules/.
  • Registra funções e globais essenciais:
    • __('key'): Tradução via Kernel\Translator.
    • url(), asset_url(): Helpers de URL.
    • csrf_field(): Campo oculto para proteção CSRF.
    • session(), old(): Acesso a dados de sessão e flash data.
    • auth: Usuário autenticado (injetado posteriormente).

2.6. Sistema de Hooks (HookManager)

  • Instancia o gerenciador de ganchos (Hooks) que permite que módulos interceptem e modifiquem o fluxo ou dados em pontos específicos.

2.7. Carregamento de Módulos (initModuleLoader)

O Kernel\ModuleLoader entra em ação para carregar os módulos do sistema:

  1. Scan: Varre o diretório modules/.
  2. Autoload Customizado: Registra um autoloader para classes no padrão Modules\{Nome}\Classes.
  3. Load: Para cada módulo válido (com module.json):
    • Service Providers: Executa register() e boot() dos providers definidos.
    • Rotas: Carrega arquivos de rota definidos em routes.web e routes.api.
    • Recursos: Registra caminhos de Views e Locales (traduções).

2.8. Roteamento (initRouter)

  • Carrega as rotas principais de routes/web.php.
  • Compila todas as rotas registradas (do sistema e dos módulos) usando FastRoute.

3. Processamento da Requisição (Runtime)

Após a inicialização, o método run() é chamado para processar a requisição atual.

3.1. Criação do Request

Um objeto Symfony\Component\HttpFoundation\Request é criado a partir das variáveis globais ($_GET, $_POST, etc.).

3.2. Injeção de Globais

O sistema injeta dados contextuais no ambiente de visualização (View):

  • Usuário Autenticado: Se houver sessão ativa ($_SESSION['user_id']), carrega o modelo User e injeta globalmente como auth.user.
  • Configurações: Carrega configurações da empresa principal (Company ID 1) e módulos ativos.

3.3. Despacho (Dispatch)

O FastRoute\Dispatcher compara a URI e o Método HTTP da requisição com as rotas registradas.

  • 404 Not Found: Se nenhuma rota coincidir, exibe página de erro 404.
  • 405 Method Not Allowed: Se a rota existe mas o método (GET/POST) é incorreto.
  • 200 Found: Se a rota for encontrada:
    1. O Handler (Controlador + Método) e os Middlewares são identificados.
    2. Execução de Middlewares: Os middlewares (ex: AuthMiddleware, CsrfMiddleware) são executados em cadeia. Se algum falhar (ex: não autenticado), a requisição é interrompida ou redirecionada.
    3. Execução do Controlador: O método do controlador é chamado, recebendo os parâmetros da rota e o objeto Request.

4. Resposta (Response)

O controlador processa a lógica de negócios e retorna uma resposta.

  • Geralmente, o controlador renderiza uma View (arquivo .twig).
  • O conteúdo HTML gerado é enviado de volta ao navegador.
  • Em APIs, a resposta pode ser um JSON.

Resumo Gráfico

  1. Request (public/index.php) ↓
  2. Kernel Boot (Application::__construct)
    • Load Env & Config
    • Init DB & Container
    • Load Modules (Providers & Routes) ↓
  3. App Run (Application::run)
    • Middleware Stack (Auth, CSRF...)
    • Router Dispatch ↓
  4. Controller Action
    • Business Logic
    • DB Queries ↓
  5. View Rendering (Twig) ↓
  6. Response (HTML/JSON)