# 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)