Files
dockerfluxodecaixapro/rules/11_LIFECYCLE.md
T
2026-09-01 10:46:29 -03:00

121 lines
5.4 KiB
Markdown
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()`.
```php
// 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)