121 lines
5.4 KiB
Markdown
Executable File
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)
|