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:
- Carregar o Autoloader do Composer:
require __DIR__ . '/../vendor/autoload.php'. - Instanciar a Aplicação: Cria uma nova instância de
Kernel\Application. - 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.phpse 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/templatesemodules/. - Registra funções e globais essenciais:
__('key'): Tradução viaKernel\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:
- Scan: Varre o diretório
modules/. - Autoload Customizado: Registra um autoloader para classes no padrão
Modules\{Nome}\Classes. - Load: Para cada módulo válido (com
module.json):- Service Providers: Executa
register()eboot()dos providers definidos. - Rotas: Carrega arquivos de rota definidos em
routes.weberoutes.api. - Recursos: Registra caminhos de Views e Locales (traduções).
- Service Providers: Executa
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 modeloUsere injeta globalmente comoauth.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:
- O Handler (Controlador + Método) e os Middlewares são identificados.
- 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. - 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
- Request (
public/index.php) ↓ - Kernel Boot (
Application::__construct)- Load Env & Config
- Init DB & Container
- Load Modules (Providers & Routes) ↓
- App Run (
Application::run)- Middleware Stack (Auth, CSRF...)
- Router Dispatch ↓
- Controller Action
- Business Logic
- DB Queries ↓
- View Rendering (Twig) ↓
- Response (HTML/JSON)