Pular para o conteúdo principal

🔄 Ciclo de Vida da Requisição

Toda Requisição Começa em index.php

  1. Definir constantes (ROOT, APP, CONFIG)
  2. Carregar funções auxiliares
  3. Verificar se está instalado (o arquivo config/database.php existe?)
  4. Se não estiver instalado → redirecionar para /install/
  5. Carregar configuração do BD + helpers, iniciar sessão
  6. Calcular o caminho da requisição (trata instalações em subdiretórios)
  7. Despachar via app/router.php

O Router

app/router.php é uma tabela de despacho plana com correspondência de padrões. Os padrões são compilados em regex e comparados com o caminho da requisição. Os grupos de captura são passados como argumentos do método do controller.


Autenticação

A maioria dos controllers chama require_auth(), que redireciona usuários não autenticados para /login. Endpoints exclusivos para administradores usam require_admin(), que retorna JSON 403.

As sessões são preenchidas no login com user_id, workspace_id, role e regeneradas para prevenir fixação de sessão.


Conexão com o Banco de Dados

A conexão PDO é criada de forma lazy na primeira consulta (singleton). Usa ERRMODE_EXCEPTION e prepared statements reais (EMULATE_PREPARES = false).


Formatos de Resposta

  • Páginas HTML: O controller define $page e inclui layout.php
  • APIs JSON: json_response() define o Content-Type, imprime JSON e encerra
  • Stream SSE: Loop persistente com text/event-stream, ping a cada 2s, encerra após 55s