Documentação do Core — SysFramework

Manual técnico e didático das classes fundamentais do núcleo do SysFramework.

Classe: SysRouter

A classe SysRouter é responsável por gerenciar todas as rotas do aplicativo, permitindo registrar rotas, grupos de rotas, middlewares, limites de requisição (rate limiting), flash messages, respostas JSON e páginas de erro personalizadas.

Namespace

namespace Core;

Principais Funcionalidades

Registro de Rotas

Exemplos de registro de rotas:


SysRouter::get('/home', 'HomeController@index')->name('home');
SysRouter::post('/login', 'AuthController@login')->name('login');
SysRouter::group(['prefix' => '/admin', 'middleware' => ['AuthMiddleware']], function() {
    SysRouter::get('/dashboard', 'AdminController@dashboard')->name('admin.dashboard');
});
    

Rate Limiting

Protege contra excesso de requisições. Se um IP exceder o limite definido (requestLimit) em um determinado intervalo (timeFrame), ele será temporariamente bloqueado.

Resolução de Requisições

resolve($requestMethod, $requestUri, $dependencies) compara a URL solicitada com as rotas registradas, aplica middlewares, valida parâmetros e chama o controller correspondente.

Rotas Nomeadas


$url = SysRouter::route('home'); // Retorna /home
$urlAdmin = SysRouter::route('admin.dashboard'); // Retorna /admin/dashboard

Redirecionamento


SysRouter::redirect('home'); // Redireciona para rota nomeada 'home'
SysRouter::redirect('admin.dashboard', ['id' => 10]); // Redireciona com parâmetros

Respostas JSON


SysRouter::jsonResponse(['status' => 'success', 'data' => $data], 200);

Logs e Monitoramento

Páginas de Erro Customizadas


SysRouter::setCustomErrorPage(404, function() {
    echo "Página não encontrada!";
});

Dicas de Uso

Conclusão

A classe SysRouter fornece um sistema completo de roteamento para aplicações PHP, integrando segurança, middlewares, logs, rotas nomeadas, rate limiting e suporte a respostas JSON e flash messages.

BaseController

Namespace: Core
Caminho: core/BaseController.php

Descrição

A classe BaseController é a classe base concreta de todos os controladores do SysFramework. Ela fornece métodos utilitários essenciais para enviar respostas padronizadas em formato JSON, garantindo consistência entre as respostas da aplicação e facilitando o uso de APIs RESTful.

Responsabilidades principais

Métodos

jsonResponse($data, $status = 200)

Retorna uma resposta JSON genérica para o cliente.

jsonError($message, $status = 400)

Retorna uma resposta JSON formatada para erros, padronizando o formato.

Exemplo

class UserController extends BaseController {
    public function get() {
        $this->jsonResponse(['status' => 'ok']);
    }
}
      

Cache

Namespace: Core
Caminho: core/Cache.php

Descrição

A classe Cache implementa um sistema simples de cache baseado em arquivos JSON, com suporte opcional a verificação de integridade via HMAC (hash autenticado). É ideal para armazenar dados temporários, resultados de consultas ou respostas de APIs, evitando reprocessamentos e melhorando a performance da aplicação.

Propriedades

Métodos

__construct(string $path, ?string $hmacKey = null)

Inicializa o sistema de cache, criando o diretório especificado se necessário.

fileForKey(string $key): string

Gera o caminho completo do arquivo de cache a partir de uma chave fornecida.

set(string $key, $value, int $ttl = 3600): bool

Armazena um valor no cache. O valor é codificado em JSON e salvo junto com a data de expiração ($ttl em segundos). Se uma hmacKey foi definida, o conteúdo é assinado com HMAC-SHA256.

get(string $key)

Recupera um valor do cache, se ainda válido. Caso o arquivo não exista, esteja expirado ou tenha sido adulterado (HMAC inválido), retorna null.

delete(string $key): bool

Remove um item de cache específico, caso exista.

Exemplo de uso

use Core\Cache;

$cache = new Cache(__DIR__ . '/cache', 'minha_chave_hmac');

// Gravar valor no cache
$cache->set('config', ['modo' => 'produção'], 600);

// Ler valor
$config = $cache->get('config');

// Excluir valor
$cache->delete('config');
      

Notas técnicas

Boas práticas

Histórico

Core\Component

Classe abstrata para criação de componentes reutilizáveis no SysFramework. Cada componente pode receber atributos dinâmicos e deve implementar seu próprio método render().

Propriedades

PropriedadeTipoDescrição
$attributesarrayLista de atributos personalizados passados ao componente.

Métodos

MétodoDescrição
__construct($attributes = [])Inicializa o componente com atributos dinâmicos.
render()Método abstrato que deve ser implementado para renderizar o componente.
__get($name)Permite acessar atributos dinâmicos como propriedades do objeto.

Exemplo

class Botao extends Component {
    public function render() {
        return "<button class='btn btn-primary'>" .
               htmlspecialchars($this->label ?? 'OK') .
               "</button>";
    }
}

// Uso:
$botao = new Botao(['label' => 'Salvar']);
echo $botao->render();

Core\ComponentManager

A classe ComponentManager é responsável por localizar, instanciar e renderizar componentes definidos na aplicação. Ela funciona como o “controlador de componentes” do SysFramework, garantindo que cada componente seja carregado de forma dinâmica e independente.

Propriedades

Esta classe não possui propriedades declaradas.

Métodos

MétodoDescrição
render($name, $attributes = []) Localiza e renderiza um componente da aplicação. O nome informado deve corresponder à classe dentro do namespace App\Components. Caso a classe não exista, uma exceção é lançada.

Funcionamento

O método render() monta automaticamente o nome completo da classe do componente, verifica sua existência com class_exists(), instancia o componente passando seus atributos, e então chama o método render() do próprio componente.

Exemplo de uso

// Estrutura esperada:
// App/Components/Botao.php

namespace App\Components;
use Core\Component;

class Botao extends Component {
    public function render() {
        return "<button class='btn'>" .
               htmlspecialchars($this->label ?? 'OK') .
               "</button>";
    }
}

// Exemplo de uso do ComponentManager:
use Core\ComponentManager;

$manager = new ComponentManager();

// Renderiza o componente "Botao"
echo $manager->render('botao', ['label' => 'Enviar']);

Tratamento de erros

Se o componente especificado não for encontrado, é lançada uma exceção:

throw new \Exception("Componente {$name} não encontrado.");

Isso ajuda a detectar rapidamente problemas de nomenclatura ou caminhos incorretos.

Core\Request

A classe Request encapsula todas as informações relacionadas à requisição HTTP atual. Ela fornece métodos convenientes para acessar o método HTTP, URI, parâmetros GET e POST, cabeçalhos (headers) e detectar o tipo da requisição (como AJAX, GET, POST, PUT, DELETE).

Propriedades

PropriedadeTipoDescrição
$methodstringArmazena o método HTTP da requisição (GET, POST, etc.).
$uristringURI requisitada pelo cliente.
$getarrayContém os parâmetros enviados via $_GET.
$postarrayContém os parâmetros enviados via $_POST.
$headersarrayLista de cabeçalhos HTTP obtidos através de getallheaders().

Métodos

MétodoDescrição
__construct()Inicializa as propriedades com base nas variáveis globais da requisição atual.
method()Retorna o método HTTP (ex.: GET, POST, PUT, DELETE).
uri()Retorna a URI requisitada.
get($key = null, $default = null)Obtém um parâmetro específico de $_GET ou o array completo.
post($key = null, $default = null)Obtém um parâmetro específico de $_POST ou o array completo.
headers()Retorna o array completo de cabeçalhos da requisição.
header($key, $default = null)Retorna o valor de um cabeçalho específico, se existir.
isAjax()Verifica se a requisição foi feita via AJAX.
isPost()Retorna true se o método for POST.
isGet()Retorna true se o método for GET.
isPut()Retorna true se o método for PUT.
isDelete()Retorna true se o método for DELETE.

Descrição detalhada

A classe Request abstrai o acesso às variáveis superglobais do PHP, oferecendo uma interface orientada a objetos para ler parâmetros de requisição de forma segura e limpa.

Ela é normalmente utilizada dentro dos controladores para manipular os dados enviados pelo cliente sem precisar acessar diretamente $_GET ou $_POST.

Exemplo de uso

use Core\Request;

$request = new Request();

// Verificar o método HTTP
if ($request->isPost()) {
    $nome = $request->post('nome');
    echo "Dados recebidos via POST: " . htmlspecialchars($nome);
}

// Detectar requisição AJAX
if ($request->isAjax()) {
    echo "Requisição AJAX detectada.";
}

// Acessar cabeçalhos
$userAgent = $request->header('User-Agent');
echo "Navegador: " . $userAgent;

Observações

Classe Core\Response

A classe Response é responsável por gerenciar as respostas HTTP enviadas pelo servidor. Ela define o status code, adiciona cabeçalhos personalizados, envia o conteúdo da resposta (como HTML ou JSON) e realiza redirecionamentos quando necessário.

📁 Namespace

namespace Core;

🧩 Atributos

⚙️ Métodos

setStatusCode(int $code)

Define o código de status HTTP da resposta. Exemplo: 200 (OK), 404 (Not Found), 500 (Internal Server Error).

$response->setStatusCode(404);

addHeader(string $name, string $value)

Adiciona um cabeçalho (header) personalizado à resposta.

$response->addHeader('Content-Type', 'application/json');

send($content)

Envia todos os cabeçalhos definidos e exibe o conteúdo fornecido (geralmente HTML, texto ou JSON).


$response->setContentType('text/html')
         ->setStatusCode(200)
         ->send('<h1>Página carregada com sucesso!</h1>');
    

redirect($url)

Redireciona o cliente para outra URL com o código de status 302 (Found).

$response->redirect('/login');

setContentType($type = 'text/html')

Define o tipo de conteúdo da resposta. Exemplo: text/html, application/json, etc.

$response->setContentType('application/json');

💡 Exemplo Prático


use Core\Response;

$response = new Response();

// Envia resposta HTML simples
$response->setStatusCode(200)
         ->setContentType('text/html')
         ->send('<h1>Bem-vindo ao SysFramework!</h1>');

// Redireciona para outra rota
//$response->redirect('/home');
    

🧠 Observações

Classe Core\Security

A classe Security fornece um conjunto de métodos estáticos para aumentar a segurança das aplicações desenvolvidas com o SysFramework. Ela protege contra ataques comuns como Cross-Site Scripting (XSS), injeção SQL e requisições forjadas (CSRF).

📁 Namespace

namespace Core;

🧰 Métodos

sanitize(string $value)

Remove todas as tags HTML e converte caracteres especiais para entidades seguras. Ideal para limpar entradas de formulários antes de armazenar ou exibir.


$nome = "<script>alert('XSS')</script>";
$seguro = Security::sanitize($nome); 
// Resultado: alert('XSS') — sem tags HTML
    

escapeSql(string $value)

Sanitiza uma string contra injeções SQL. No entanto, o uso recomendado é de prepared statements em vez de escaping manual.


// Evite concatenar valores diretamente em queries SQL.
// Use sempre prepared statements com PDO.
$query = $pdo->prepare("SELECT * FROM usuarios WHERE nome = ?");
$query->execute([$nome]);
    

generateCsrfToken()

Gera e armazena um token CSRF na sessão, usado para proteger formulários contra envios maliciosos externos.


$token = Security::generateCsrfToken();
echo '<input type="hidden" name="csrf_token" value="' . $token . '">';
    

validateCsrfToken(string $token)

Valida o token CSRF enviado em um formulário comparando-o com o valor armazenado na sessão.


if (!Security::validateCsrfToken($_POST['csrf_token'])) {
    die('Token CSRF inválido!');
}
    

escapeHtml(string $value)

Escapa caracteres HTML perigosos, prevenindo ataques de XSS. Deve ser utilizado sempre que dados do usuário forem exibidos na interface.


echo Security::escapeHtml($comentario);
// Exemplo: converte <script> em &lt;script&gt;
    

validateUrl(string $url)

Verifica se uma string é uma URL válida usando filter_var().


if (!Security::validateUrl($url)) {
    echo "URL inválida!";
}
    

💡 Exemplo Prático


use Core\Security;

session_start();

// Gera o token CSRF para o formulário
$csrfToken = Security::generateCsrfToken();

// Exibe o formulário protegido
echo '<form method="post">';
echo '<input type="hidden" name="csrf_token" value="' . $csrfToken . '">';
echo '<input type="text" name="nome">';
echo '<button type="submit">Enviar</button>';
echo '</form>';

// Valida a submissão
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!Security::validateCsrfToken($_POST['csrf_token'])) {
        die('Falha de segurança: token CSRF inválido!');
    }
    echo 'Token válido e dados processados com segurança.';
}
    

🧠 Boas Práticas

Classe Core\SysCli

A classe SysCli oferece uma forma segura e estruturada de executar comandos de terminal (Command Line Interface) a partir do SysFramework. Ela foi projetada para prevenir falhas de segurança, evitando injeções de comando e exposição de credenciais sensíveis.

📁 Namespace

namespace Core;

🧩 Visão Geral

🧠 Propriedades

⚙️ Métodos

protected runShellCommand(string $cmd, array $args = []): array

Executa um comando de forma segura, escapando todos os argumentos e capturando o código de status, a saída e o erro. Este é o método interno usado por todos os outros métodos públicos.


use Core\SysCli;

$cli = new SysCli();
$result = $cli->execCommand('ls', ['-la']);

echo "Comando: " . $result['cmd'] . PHP_EOL;
echo "Saída: " . $result['output'] . PHP_EOL;
echo "Erro: " . $result['error'] . PHP_EOL;
echo "Status: " . $result['status'];
    

mysqldump(array $dbConfig, string $dumpFile): array

Realiza um mysqldump de forma segura, sem expor senhas na linha de comando. Cria temporariamente um arquivo de configuração protegido com as credenciais, executa o comando e o remove ao final.


$dbConfig = [
    'host' => 'localhost',
    'user' => 'root',
    'password' => 'senhaSegura123',
    'database' => 'meu_banco'
];

$cli = new SysCli();
$result = $cli->mysqldump($dbConfig, '/backups/meu_banco.sql');

if ($result['status'] === 0) {
    echo "Backup realizado com sucesso!";
} else {
    echo "Erro no backup: " . $result['error'];
}
    

serve(string $host = '127.0.0.1', int $port = 8000, string $docroot = 'public'): array

Inicia o servidor embutido do PHP apontando para o diretório especificado. Útil em ambiente de desenvolvimento para testes rápidos de aplicações.


$cli = new SysCli();
$cli->serve('0.0.0.0', 8080, 'public');
    

execCommand(string $command, array $args = []): array

Executa um comando genérico no terminal, utilizando internamente runShellCommand(). Todos os argumentos são automaticamente escapados para segurança.


$cli = new SysCli();
$result = $cli->execCommand('ping', ['-c', '4', 'google.com']);
echo $result['output'];
    

💡 Exemplo Prático


use Core\SysCli;

$cli = new SysCli();

// Rodar comando simples
echo "<pre>";
print_r($cli->execCommand('whoami'));
echo "</pre>";

// Iniciar servidor PHP local
$cli->serve('127.0.0.1', 9000, 'public');

// Realizar dump de banco de dados de forma segura
$config = [
    'host' => 'localhost',
    'user' => 'root',
    'password' => '123456',
    'database' => 'sysdb'
];
print_r($cli->mysqldump($config, '/tmp/sysdb.sql'));
    

🧱 Estrutura de Retorno

Todos os métodos de execução retornam um array com as seguintes chaves:

⚠️ Cuidados e Boas Práticas

Classe: SysController

A classe SysController fornece funcionalidades de apoio aos controladores do SysFramework, permitindo enviar respostas no formato JSON de forma simples e padronizada. É uma classe utilitária leve, usada principalmente por controladores que necessitam retornar dados para chamadas AJAX ou APIs REST.

Namespace

namespace Core;

Métodos

jsonResponse($data, $statusCode = 200)

Envia uma resposta HTTP no formato JSON. Este método define o cabeçalho Content-Type: application/json, ajusta o código de status HTTP com http_response_code(), e converte automaticamente os dados passados para JSON utilizando json_encode(). Após o envio da resposta, o script é encerrado com exit().

Parâmetros:
Exemplo de uso:

use Core\SysController;

class ApiController extends SysController
{
    public function getUserList()
    {
        $users = [
            ['id' => 1, 'nome' => 'Marco'],
            ['id' => 2, 'nome' => 'Ana']
        ];

        // Retorna os dados em formato JSON
        $this->jsonResponse($users);
    }
}
    

Resumo de Funcionamento

Ao chamar jsonResponse(), a saída do PHP é imediatamente encerrada, garantindo que nenhum conteúdo adicional seja adicionado à resposta JSON. Ideal para endpoints de API e controladores AJAX.

Conclusão

A SysController simplifica o envio de respostas JSON dentro do SysFramework, tornando o código dos controladores mais limpo e consistente. É ideal para aplicações modernas que utilizam frontends dinâmicos com jQuery, AJAX ou APIs REST.

Classe: SysEnv

A classe SysEnv é responsável por carregar e gerenciar as variáveis de ambiente do SysFramework. Ela lê automaticamente o arquivo .env e disponibiliza as variáveis definidas em $_ENV e $_SERVER, facilitando a configuração do sistema sem expor informações sensíveis diretamente no código.

Namespace

namespace Core;

Métodos

public static function load($filePath = __DIR__ . '/../.env')

Carrega as variáveis de ambiente definidas no arquivo .env especificado. Cada linha do arquivo deve seguir o formato CHAVE=VALOR. Comentários iniciados com # são ignorados.

Parâmetros:
Exceções:

Lança uma exceção \Exception se o arquivo .env não for encontrado.

public static function get($key, $default = null)

Obtém o valor de uma variável de ambiente carregada anteriormente. Caso a variável não exista, retorna o valor padrão informado.

Parâmetros:
Retorno:

Retorna o valor da variável de ambiente solicitada ou o valor padrão.

Exemplo de uso


use Core\SysEnv;

// Carrega o arquivo .env
SysEnv::load(__DIR__ . '/../.env');

// Obtém variáveis do ambiente
$dbHost = SysEnv::get('DB_HOST', 'localhost');
$dbUser = SysEnv::get('DB_USER', 'root');
$dbPass = SysEnv::get('DB_PASS', '');
    

Dicas de Uso

Segurança

O SysEnv protege o sistema de exposição acidental de credenciais sensíveis, mantendo-as isoladas em um arquivo de ambiente fora do diretório público.

Conclusão

A SysEnv é essencial para o gerenciamento de configurações seguras e dinâmicas no SysFramework. Simples, segura e eficiente, ela garante que cada ambiente (produção, teste, desenvolvimento) tenha suas próprias configurações sem alterar o código-fonte.

Classe: SysImages

A classe SysImages é responsável pelo carregamento, redimensionamento e salvamento seguro de imagens utilizando a biblioteca GD do PHP. Ela valida o tipo MIME, preserva o formato original e impede vulnerabilidades de path traversal e manipulação indevida de arquivos.

Namespace

namespace Core;

Métodos Principais

__construct(string $filePath)

Construtor da classe que carrega uma imagem existente no servidor, valida seu tipo e prepara o recurso GD para manipulação.

Exceções:

public function resizeToWidth(int $newWidth): void

Redimensiona a imagem proporcionalmente, ajustando sua largura para $newWidth.

public function resizeToHeight(int $newHeight): void

Redimensiona a imagem proporcionalmente, ajustando sua altura para $newHeight.

public function resize(int $newWidth, int $newHeight): void

Redimensiona a imagem para o tamanho exato informado, mantendo a transparência em imagens PNG.

public function save(string $filename, ?int $quality = 90): void

Salva a imagem no disco, validando o nome do arquivo e preservando o tipo original se nenhuma extensão for fornecida.

Segurança:

__destruct()

Destroi o recurso GD em memória ao final da execução, evitando vazamentos de memória.

Exemplo de uso


use Core\SysImages;

try {
    // Carrega a imagem
    $img = new SysImages('uploads/foto.jpg');

    // Redimensiona para largura máxima de 800px
    $img->resizeToWidth(800);

    // Salva com qualidade 90
    $img->save('foto_redimensionada.jpg', 90);
    
    echo "Imagem processada com sucesso!";
} catch (Exception $e) {
    echo "Erro: " . $e->getMessage();
}
    

Dicas de Uso

Segurança

SysImages valida o tipo MIME da imagem e impede a execução de arquivos falsos (por exemplo, scripts renomeados com extensão de imagem). Além disso, protege contra escrita fora do diretório permitido.

Conclusão

A classe SysImages oferece uma interface simples e segura para manipulação de imagens com o PHP GD, sendo uma ferramenta essencial no ecossistema do SysFramework para tratamento de uploads e otimização visual.

Classe: SysLogger

A classe SysLogger é responsável pelo registro de logs do sistema, permitindo acompanhar eventos, avisos e erros de execução do SysFramework. Ela grava mensagens formatadas em arquivos locais, incluindo informações de data, nível e IP do cliente.

Namespace

namespace Core;

Descrição Geral

O SysLogger simplifica o processo de registro de logs, com suporte a diferentes níveis de severidade (INFO, WARNING e ERROR), além de incluir o endereço IP de origem. O log padrão é salvo no diretório /logs/app.log, podendo ser configurado via construtor.

Métodos Principais

__construct($logFile = null, $logLevel = self::LOG_LEVEL_INFO, $clientIP = null)

Inicializa o logger com arquivo de destino, nível de log e IP do cliente. Caso nenhum arquivo seja especificado, utiliza logs/app.log por padrão.

public function log($message, $level = self::LOG_LEVEL_INFO)

Registra uma mensagem no log, de acordo com o nível informado.

public function info($message)

Registra uma mensagem informativa (INFO).

public function warning($message)

Registra um aviso (WARNING).

public function error($message)

Registra um erro (ERROR).

protected function shouldLog($level)

Determina se o log deve ser registrado com base no nível configurado.

protected function formatMessage($message, $level)

Formata a mensagem antes de gravá-la, incluindo timestamp, nível e IP.

Exemplo de uso


use Core\SysLogger;

$logger = new SysLogger();

// Registra mensagens de diferentes níveis
$logger->info('Inicialização do sistema concluída.');
$logger->warning('Uso de memória acima do esperado.');
$logger->error('Falha ao conectar ao banco de dados.');
    

Dicas de Uso

Segurança

O SysLogger impede a exposição de dados sensíveis e usa o IP do cliente apenas para rastreamento. Recomenda-se proteger o diretório de logs com permissões restritas (ex: chmod 600).

Conclusão

A classe SysLogger fornece uma forma prática e confiável de registrar eventos no sistema, sendo essencial para depuração e monitoramento do SysFramework.

Classe: SysMailer

A classe SysMailer é responsável pelo envio de e-mails via SMTP, com suporte a HTML, anexos e criptografia TLS/SSL. Ela inclui registro de logs de sucesso e falha, garantindo rastreabilidade.

Namespace

namespace Core;

Descrição Geral

O SysMailer permite configurar host, porta, autenticação, remetente e criptografia. Suporta envio de mensagens em HTML ou texto simples, anexos e charset customizado. Mensagens são logadas em arquivo local para auditoria.

Métodos Principais

__construct(array $config = [])

Inicializa o mailer com parâmetros de configuração como host, porta, usuário, senha, criptografia, remetente e arquivo de log.

send($to, $subject, $body, $isHtml = true, $attachments = [], $charset = 'UTF-8')

Envia um e-mail para o destinatário especificado, com assunto, corpo da mensagem e anexos opcionais. Permite mensagens HTML ou texto simples e define o charset do e-mail.

Segurança e Logs

O SysMailer cria logs de sucesso e erro no arquivo definido, incluindo timestamp e nível de registro. Conexões SSL/TLS são usadas para proteger o envio, evitando exposição de credenciais.

Exemplo de uso


use Core\SysMailer;

$config = [
    'host' => 'smtp.example.com',
    'port' => 587,
    'username' => 'usuario',
    'password' => 'senha',
    'encryption' => 'tls',
    'from_email' => 'no-reply@example.com',
    'from_name' => 'SysFramework',
    'log_file' => 'mail.log'
];

$mailer = new SysMailer($config);

$mailer->send('destinatario@example.com', 'Teste de envio', '<h1>Olá!</h1>', true);
    

Dicas de Uso

Conclusão

A classe SysMailer fornece um mecanismo seguro e completo para envio de e-mails dentro do SysFramework, com suporte a anexos, logs e criptografia.

Classe: SysORM

A classe SysORM é um ORM simples para PHP, permitindo interação segura com o banco de dados MySQL através de PDO. Suporta operações CRUD, filtragem de campos fillable e ocultação de campos hidden.

Namespace

namespace Core;

Propriedades Principais

Métodos Principais

static connect()

Conecta ao banco de dados usando PDO e retorna a instância compartilhada.

static all()

Retorna todos os registros da tabela como objetos da classe do modelo.

static find($id)

Localiza um registro pelo ID e retorna uma instância do modelo ou null se não encontrado.

static create(array $data)

Cria um novo registro usando os campos fillable e retorna a instância do registro criado.

update(array $data)

Atualiza o registro atual com os campos permitidos em fillable.

static destroy($id)

Remove o registro do banco de dados com base no ID fornecido.

toArray()

Converte os atributos do modelo em array, aplicando htmlspecialchars e ocultando campos definidos em hidden.

__get($name) / __set($name, $value)

Métodos mágicos para acessar ou definir atributos dinamicamente.

Exemplo de uso


use Core\SysORM;

class User extends SysORM {
    protected $table = 'users';
    protected $fillable = ['name', 'email', 'password'];
    protected $hidden = ['password'];
}

// Criar usuário
$newUser = User::create([
    'name' => 'Marco',
    'email' => 'marco@example.com',
    'password' => password_hash('123456', PASSWORD_DEFAULT)
]);

// Atualizar usuário
$newUser->update(['name' => 'Marco Costa']);

// Obter todos os usuários
$users = User::all();

// Buscar usuário por ID
$user = User::find($newUser->id);

// Remover usuário
User::destroy($newUser->id);
    

Dicas de Uso

Conclusão

O SysORM simplifica o gerenciamento de dados no MySQL, fornecendo métodos CRUD seguros e flexíveis, integrando-se perfeitamente ao ecossistema do SysFramework.

Classe: SysORMAuth

A classe SysORMAuth fornece funcionalidades de autenticação de usuários usando sessões PHP, integração com o modelo Auth e verificação de senhas com SysORMHash.

Namespace

namespace Core;

Métodos Principais

static attempt(array $credentials): bool

Tenta autenticar um usuário com base nas credenciais fornecidas.

static logout(): void

Encerra a sessão do usuário atual de forma segura, removendo todas as variáveis de sessão e cookies relacionados.

static user()

Retorna os dados do usuário autenticado com base no user_id da sessão.

protected static ensureSessionStarted(): void

Garante que a sessão PHP esteja ativa antes de acessar ou manipular dados de sessão.

Exemplo de uso


use Core\SysORMAuth;

// Tentativa de login
$credentials = [
    'email' => 'marco@example.com',
    'password' => '123456'
];

if (SysORMAuth::attempt($credentials)) {
    echo "Usuário autenticado com sucesso!";
} else {
    echo "Credenciais inválidas!";
}

// Obter usuário logado
$user = SysORMAuth::user();
if ($user) {
    echo "Usuário atual: " . $user['email'];
}

// Logout
SysORMAuth::logout();
echo "Sessão encerrada.";
    

Dicas de Uso

Segurança

- Regenera o ID da sessão ao autenticar para evitar session fixation.
- Limpa todas as variáveis de sessão e cookies ao fazer logout.
- Evita autenticação sem credenciais completas.

Conclusão

SysORMAuth oferece uma forma simples, segura e integrada de autenticar usuários utilizando o modelo Auth e sessões PHP, sendo ideal para aplicações construídas com o SysFramework.

Classe: SysORMHash

A classe SysORMHash fornece métodos simples e seguros para criar e verificar hashes de senhas utilizando os recursos nativos do PHP.

Namespace

namespace Core;

Métodos Principais

static make($value)

Cria um hash seguro para uma senha ou qualquer valor fornecido.

static check($value, $hashedValue)

Verifica se o valor fornecido corresponde ao hash armazenado.

Exemplo de uso


use Core\SysORMHash;

// Criar hash de uma senha
$hash = SysORMHash::make('minhaSenha123');

// Verificar senha
if (SysORMHash::check('minhaSenha123', $hash)) {
    echo "Senha correta!";
} else {
    echo "Senha incorreta!";
}
    

Dicas de Uso

Segurança

- Baseado em funções nativas do PHP (password_hash e password_verify) garantindo segurança.
- Não é reversível; hashes não podem ser descriptografados.
- Adequado para autenticação segura no SysFramework.

Conclusão

A classe SysORMHash simplifica a criação e verificação de hashes, garantindo segurança de senhas e dados sensíveis dentro do SysFramework.

Classe: SysORMRequest

A classe SysORMRequest é responsável por encapsular e validar os dados enviados em requisições HTTP (normalmente via POST ou GET), fornecendo métodos para validação e acesso seguro aos valores.

Namespace

namespace Core;

Métodos Principais

__construct()

Inicializa a instância da classe e carrega os dados da requisição, normalmente usando $_POST. Pode ser ajustado para $_GET se necessário.

rules()

Define as regras de validação para os campos da requisição. Por padrão, retorna um array vazio.

validate()

Executa a validação dos dados de acordo com as regras definidas em rules(). Se algum campo obrigatório estiver vazio, lança uma \Exception.

validated()

Retorna os dados validados após execução de validate().

__get($name)

Permite acessar os campos da requisição como propriedades da instância.

Exemplo de uso


use Core\SysORMRequest;

class UserRequest extends SysORMRequest {
    public function rules() {
        return [
            'email' => 'required',
            'password' => 'required'
        ];
    }
}

try {
    $request = new UserRequest();
    $data = $request->validated();
    echo "Dados validados: ";
    print_r($data);
} catch (Exception $e) {
    echo "Erro na validação: " . $e->getMessage();
}
    

Dicas de Uso

Segurança

- Valida dados obrigatórios antes de utilizá-los.
- Ajuda a prevenir envio de dados incompletos ou maliciosos.
- Recomenda-se combinar com filtros adicionais (como Core\Security) para sanitização de entradas.

Conclusão

A classe SysORMRequest fornece uma base sólida para tratamento e validação de dados de requisições no SysFramework, facilitando a criação de sistemas seguros e organizados.

Classe: SysSanitize

A classe SysSanitize fornece métodos para limpar e sanitizar dados de entrada, garantindo que valores recebidos de formulários, APIs ou qualquer fonte externa não contenham scripts ou tags HTML maliciosas.

Namespace

namespace Core;

Principais Métodos

Exemplos de Uso


// Sanitizando uma string
$input = '<script>alert("hack")</script>Hello World!';
$clean = SysSanitize::sanitizeString($input);
// Resultado: Hello World!

// Sanitizando um array
$data = [
    'name'  => '<b>João</b>',
    'email' => 'joao@example.com',
    'bio'   => '<script>alert("xss")</script>Developer'
];
$cleanData = SysSanitize::sanitizeArray($data);
/* Resultado:
[
    'name'  => 'João',
    'email' => 'joao@example.com',
    'bio'   => 'Developer'
]
*/ 


// Sanitizando qualquer input
$cleanInput = SysSanitize::sanitize($_POST);

Dicas de Uso

Conclusão

A classe SysSanitize é uma ferramenta simples e eficiente para proteção de entradas de usuário, garantindo que seu sistema não seja vulnerável a ataques baseados em injeção de scripts ou HTML.

Classe: SysTables

A classe SysTables facilita a exibição de tabelas dinâmicas no front-end, oferecendo recursos como paginação, busca, ordenação por colunas e controle do número de linhas exibidas.

Namespace

namespace Core;

Principais Métodos

Exemplos de Uso


$data = [
    ['name' => 'João', 'email' => 'joao@example.com'],
    ['name' => 'Maria', 'email' => 'maria@example.com'],
    ['name' => 'Carlos', 'email' => 'carlos@example.com'],
];

$columns = ['name', 'email'];

$table = new SysTables($data, $columns);

// Renderizar busca e seleção de linhas
echo $table->renderSearchAndRowsPerPage();

// Renderizar tabela
echo $table->renderTable();

// Renderizar paginação
echo $table->renderPagination();

Dicas de Uso

Conclusão

A classe SysTables simplifica a criação de tabelas dinâmicas no PHP, permitindo que desenvolvedores adicionem facilmente recursos avançados como paginação, busca e ordenação sem depender de bibliotecas externas.

Classe: SysTE

A classe SysTE é o mecanismo de templates do SysFramework, permitindo renderizar views com suporte a diretivas inspiradas no Blade (como @if, @foreach, @extends, @section, @yield, @include, @csrf etc.).

Namespace

namespace Core;

Principais Funcionalidades

Exemplos de Uso


$viewsPath = __DIR__ . '/views';
$cachePath = __DIR__ . '/cache';

$te = new SysTE($viewsPath, $cachePath);

echo $te->render('home.index', [
    'title' => 'Página Inicial',
    'users' => $userList
]);

Diretivas Suportadas

Dicas de Uso

Observações

Classe: Translator

A classe Translator gerencia traduções de strings no SysFramework, permitindo suportar múltiplos idiomas via arquivos de locale.

Namespace

namespace Core;

Funcionalidades Principais

Exemplo de Uso


$translator = new \Core\Translator('pt_br');

// Traduz uma chave simples
echo $translator->translate('welcome'); 

// Traduz com placeholders
echo $translator->translate('greeting', ['name' => 'Marco']); 

// Troca o idioma para inglês
$translator->setLocale('en');
echo $translator->translate('welcome');

Observações

Classe: Validations

A classe Validations é responsável por validar dados de entrada de forma flexível, permitindo regras simples e complexas.

Namespace

namespace Core;

Funcionalidades Principais

Exemplo de Uso


$validator = new \Core\Validations();

$data = [
    'name' => 'Marco',
    'email' => 'invalid-email'
];

$rules = [
    'name' => ['required', ['length' => [3, 50]]],
    'email' => ['required', 'email']
];

$validator->validate($data, $rules);

if ($validator->hasErrors()) {
    print_r($validator->getErrors());
}

Observações

Arquivo /config/bootsrap.php

O arquivo /config/bootsrap.php é o ponto de entrada principal do SysFramework. Ele inicializa o ambiente do framework, carrega configurações, rotas, middlewares, instâncias de Request e Response, e resolve as requisições HTTP recebidas.

📁 Namespace

Sem namespace (arquivo global de configuração)

🧩 Funcionalidades Principais

⚙️ Passo a Passo Interno

Inicialização da sessão

if (!isset($_SESSION)) {
    session_start();
}

Garante que a sessão esteja ativa, necessária para autenticação, CSRF e flash messages.

Carregamento de arquivos de configuração


require_once dirname(__DIR__) . '/config/helpers.php';
$paths = require dirname(__DIR__) . '/config/paths.php';
require_once dirname(__DIR__) . '/config/loadenv.php';
require_once dirname(__DIR__) . '/config/settings.php';
    

Middleware de sanitização

sanitizeMiddleware();

Sanitiza globalmente os dados recebidos via $_POST e $_GET para prevenir XSS e injeções.

Instância de Request e Response


$request = new \Core\Request();
$response = new \Core\Response();
    

Cria objetos que abstraem a requisição HTTP e permitem o envio de respostas.

Injeção de dependências


$dependencies = [
    new SysTE(VIEWS_PATH, VIEWSCACHE_PATH),
    new SysLogger(),
    new SomeService(),
    new AnotherService(),
    $request,
    $response
];
    

Lista de dependências que serão injetadas automaticamente nos controladores ao resolver a rota.

Resolução da rota

SysRouter::resolve($requestMethod, $requestUri, $dependencies);

O roteador encontra o controlador correspondente à URI e método HTTP, e executa o fluxo da requisição.

💡 Exemplo Prático


use Core\Request;
use Core\Response;
use Core\SysTE;
use Core\SysRouter;
use Core\SysLogger;

// Instancia objetos essenciais
$request = new Request();
$response = new Response();
$view = new SysTE(VIEWS_PATH, VIEWSCACHE_PATH);
$logger = new SysLogger();

// Define dependências do controlador
$dependencies = [$view, $logger, $request, $response];

// Resolva a rota atual
SysRouter::resolve($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $dependencies);
    

🧠 Observações

Arquivo /config/database.php

O arquivo /config/database.php configura a conexão com o banco de dados utilizando o Eloquent ORM do Laravel, através da classe Illuminate\Database\Capsule\Manager. Ele lê as variáveis de ambiente definidas no projeto para estabelecer a conexão e inicializar o Eloquent.

📁 Namespace

Sem namespace (arquivo global de configuração)

🧩 Funcionalidades Principais

⚙️ Passo a Passo Interno

Instanciação do Capsule Manager

use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule;

Cria a instância do gerenciador do Eloquent.

Adição da conexão


$capsule->addConnection([
    "driver" => $_ENV['DB_CONNECTION'],
    "host" => $_ENV['DB_HOST'],
    "database" => $_ENV['DB_DATABASE'],
    "username" => $_ENV['DB_USERNAME'],
    "password" => $_ENV['DB_PASSWORD'],
    "charset" => $_ENV['DB_CHARSET'],
    "port" => $_ENV['DB_PORT'],
    "collation" => 'utf8mb4_general_ci',
    "prefix"    => '',
]);
    

Lê os parâmetros do banco de dados do arquivo .env e adiciona a conexão ao Capsule.

Inicialização do Eloquent


$capsule->setAsGlobal();
$capsule->bootEloquent();
    

Define o Eloquent como global e inicializa seus recursos, permitindo o uso do ORM em qualquer parte do projeto.

💡 Exemplo Prático


use Illuminate\Database\Capsule\Manager as Capsule;

// Obtenção da instância
$capsule = require __DIR__ . '/config/database.php';

// Consultas usando Eloquent
$users = $capsule->table('users')->get();
foreach ($users as $user) {
    echo $user->name;
}

// Ou usando Models
use App\Models\User;
$users = User::all();
    

🧠 Observações

Arquivo /config/functions.php

O arquivo /config/functions.php contém funções globais utilitárias utilizadas em todo o SysFramework. Ele inclui funções para sanitização, manipulação de sessões, redirecionamentos, logging, formatação de dados, criptografia, carregamento de views, autoload de classes e cálculos de datas/tempos.

📁 Namespace

Sem namespace (arquivo global de funções)

🧩 Funcionalidades Principais

💡 Exemplos Práticos


// Sanitizar dados
sanitizeMiddleware();

// Redirecionamento
redirect('/home');

// Log de erros
logError('Falha na conexão com o banco de dados.');

// Geração de URL base
echo baseUrl('assets/css/style.css');  // http://localhost/assets/css/style.css

// Formatar datas
echo formatDate('2025-08-30 14:30:00'); // 30/08/2025 14:30

// Formatar moeda
echo formatCurrency(2500); // R$ 2.500,00

// Formatar número
echo formatToTwoDecimals(45.6789); // 45.68

// Calcular diferença entre datas
echo daysBetweenDates('2025-08-01', '2025-08-30'); // 29

// Calcular minutos entre eventos
$event1 = '2025-08-30 14:00:00';
$event2 = '2025-08-30 16:30:00';
echo minutesBetweenEvents($event1, $event2); // 150
    

🧠 Observações

Arquivo /config/helpers.php

O arquivo /config/helpers.php contém funções auxiliares globais para o SysFramework. Ele provê recursos como geração de URLs, sanitização de dados, manipulação de sessões, criptografia, helpers para views, utilitários de strings, arrays, datas, números aleatórios e segurança (CSRF).

📁 Namespace

Sem namespace (arquivo global de helpers)

🧩 Funcionalidades Principais

💡 Exemplos Práticos


// Gerar URL de asset
echo asset('css/style.css');

// Sanitizar dados de formulário
sanitizeMiddleware();

// Gerar token CSRF
$token = generateCsrfToken();

// Checar token CSRF
if (!checkCsrfToken($token)) abort(403, 'Token inválido');

// Redirecionar usuário
redirect('/home');

// Gerar slug
echo str_slug('Título de Exemplo'); // titulo-de-exemplo

// Gerar número aleatório entre 10 e 100
$rand = generateRandomNumber(10, 100);

// Recuperar valor antigo de formulário
$oldEmail = old('email', 'default@example.com');

// Dump and die
dd($oldEmail, $rand);
    

🧠 Observações

Arquivo /config/loadenv.php

Este arquivo é responsável por carregar as variáveis de ambiente da aplicação a partir do arquivo .env e definir constantes globais no SysFramework. Ele utiliza a classe Core\SysEnv para leitura e acesso seguro das variáveis.

📁 Namespace

Sem namespace (arquivo global de configuração)

🧩 Funcionalidades Principais

💡 Observações

📌 Exemplo de Uso


echo APP_NAME;       // SysFramework
echo APP_ENV;        // local
echo DB_DATABASE;    // sysframework
echo MAIL_HOST;      // sandbox.smtp.mailtrap.io
    

Arquivo /config/paths.php

Este arquivo retorna um array associativo contendo todos os caminhos principais e subdiretórios utilizados pelo SysFramework. Ele serve como referência central para localizar arquivos e pastas da aplicação.

🧩 Funcionalidades Principais

💡 Observações

📌 Exemplo de Uso


$paths = require __DIR__ . '/paths.php';
echo $paths['base_path'];        // /var/www/html/seu-projeto
echo $paths['controllers_path']; // /var/www/html/seu-projeto/app/Controllers
echo $paths['uploads_path'];     // /var/www/html/seu-projeto/storage/uploads
    

Arquivo /config/settings.php

Este arquivo é responsável por configurar variáveis globais, inicializar serviços essenciais do SysFramework e definir constantes com os caminhos do projeto, facilitando o acesso a diretórios e recursos em toda a aplicação.

🧩 Funcionalidades Principais

💡 Observações

📌 Exemplo de Uso


// Usando o token CSRF
$csrf = $_SESSION['csrf_token'];

// Acessando o caminho de uploads
$uploadDir = UPLOADS_PATH;

// Traduzindo uma mensagem
echo $translator->translate('welcome');

Arquivo /public/index.php

Este é o ponto de entrada principal da aplicação (front controller) do SysFramework. Todo request HTTP passa por este arquivo, que inicializa o framework e carrega todas as dependências necessárias.

🧩 Funcionalidades Principais

💡 Observações

📌 Fluxo de Execução

  1. Inicia a sessão do usuário.
  2. Ativa exibição de erros (modo desenvolvimento).
  3. Carrega o autoload do Composer para dependências externas.
  4. Chama o bootstrap.php para inicializar o SysFramework (helpers, rotas, env, middlewares, etc.).
  5. O framework passa o request para o roteador, que dispara o controller correspondente.

Arquivo /public/robots.txt

O robots.txt é um arquivo usado para fornecer instruções aos motores de busca (como Google, Bing, etc.) sobre quais páginas ou diretórios podem ser rastreados ou indexados.

🧩 Conteúdo Atual

User-agent: *
Disallow:

💡 Explicação

📌 Observações

Arquivo /public/.htaccess

O .htaccess é um arquivo de configuração do Apache que permite ajustar configurações específicas do servidor para o diretório onde está localizado.

🧩 Conteúdo Atual

Options All -Indexes

php_value memory_limit 768M
php_flag register_long_arrays on
#php_value post_max_size 100M
#php_value upload_max_size 64M
#php_value max_execution_time 300
#php_value max_input_time 300
#php_value upload_max_filesize 64M
#php_flag short_open_tag on
php_value date.timezone 'America/Sao_Paulo'
php_value default_charset 'UTF-8'

php_value max_file_uploads 2000

#php_value extension fileinfo.so

php_flag display_errors on
php_value error_reporting -1

#php_value session.gc_maxlifetime 1400

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule ^(.*)$ index.php/$1

💡 Explicação das Configurações

📌 Observações

Arquivo /.env

O arquivo .env contém todas as variáveis de ambiente necessárias para configurar o SysFramework em seu servidor ou ambiente local. Ele não deve ser versionado em repositórios públicos quando contiver dados sensíveis.

🧩 Conteúdo Atual (Exemplo Seguro)

# ========================================
# Configurações do aplicativo
# ========================================
APP_NAME=SysFramework
APP_ENV=local
APP_KEY=base64:YOUR_APP_KEY_HERE
APP_DEBUG=false
APP_TIMEZONE=America/Sao_Paulo
APP_URL=http://localhost:8000
APP_LOCALE=utf-8

BCRYPT_ROUNDS=12

# ========================================
# Configurações do banco de dados
# ========================================
DB_CONNECTION=mysql
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_general_ci
DB_PREFIX=
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sysframework
DB_USERNAME=root
DB_PASSWORD=secret

# ========================================
# Configurações de e-mail
# ========================================
MAIL_TRANSPORT=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=no-reply@example.com
MAIL_FROM_NAME=SysFramework
MAILER_DSN=smtp://your_username:your_password@smtp.example.com:587
MAIL_URL=http://example.com

# ========================================
# Configuração de teste
# ========================================
APP_TEST=teste

💡 Explicação das Configurações

📌 Observações

Arquivo composer.json

O composer.json é o arquivo de configuração do Composer, usado para gerenciar dependências do SysFramework e configurar autoload, scripts e requisitos do projeto.

🧩 Conteúdo Atual

{
    "name": "syspanel/sysframework",
    "description": "PHP Framework - Version 2.0",
    "type": "project",
    "license": "MIT",
    "authors": [
        {
            "name": "Marco Costa",
            "email": "sysframework@syspanel.com.br"
        }
    ],
    "config": {
        "optimize-autoloader": true,
        "prepend-autoloader": false,
        "platform": {
            "php": "8.3.0"
        }
    },
    "require": {
        "php-di/php-di": "^7.0",
        "intervention/image": "^3.8",
        "gilbitron/easycsrf": "^1.5",
        "twbs/bootstrap": "5.3.3",
        "twitter/bootstrap": "*",
        "sceditor/sceditor": "^2.1",
        "symfony/mailer": "^7.1",
        "guzzlehttp/psr7": "^2.7",
        "middlewares/utils": "^4.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "App\\Controllers\\": "app/Controllers/",
            "App\\Models\\": "app/Models/",
            "App\\Services\\": "app/Services/",
            "App\\Middlewares\\": "app/Middlewares/",
            "App\\Handlers\\": "app/Handlers/",
            "Core\\": "core/",
            "Core\\Library": "core/library",
            "Database\\Migrations\\": "database/migrations",
            "Database\\Seeders\\": "database/seeders"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Console\\Commands\\": "app/Console/Commands/"
        }
    },
    "scripts": {
        "post-install-cmd": [
            "Composer\\ScriptHandler::clearCache"
        ],
        "post-update-cmd": [
            "Composer\\ScriptHandler::clearCache"
        ]
    }
}

💡 Explicação das Configurações

📌 Observações

Arquivo LICENSE

O arquivo LICENSE define os termos da licença do SysFramework, garantindo direitos e responsabilidades aos usuários do software.

🧩 Conteúdo Atual

MIT License

Copyright (c) 2025 SysFramework (sysframework@syspanel.com.br)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is provided to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

💡 Explicação da Licença MIT

📌 Observações

Arquivo README.md

O arquivo README.md fornece uma visão geral do SysFramework, incluindo informações de instalação, requisitos, recursos, componentes externos e suporte.

🧩 Conteúdo Atual

SysFramework

sysframework.syspanel.com.br

MVC PHP Framework desenvolvido com uma estrutura robusta e modular para fornecer uma base sólida para a criação de aplicações web escaláveis e produtivas.

Versão 2.0

28/10/2025

Marco Costa (sysframework@syspanel.com.br)

## Requirements

* PHP 8.3

## Ferramentas

1 - SysCli
2 - SysORM
3 - SysTE
4 - SysRouter e Injeção de Dependências
5 - Bloqueio de IP por excesso de requisições
6 - Disponível uso de Request e Response
7 - SysTables

## Installation

1 - Extract SysFramework.zip no diretório html
2 - Ative permissão 0755 em todas as pastas e arquivos
3 - Ative permissão 0775 nos diretórios: cache, logs, storage, vendor
4 - Ative permissão 0644 nos arquivos .htaccess e public/.htaccess
5 - Configuração no Virtual Host Apache2:
    <Directory "/var/www/html/sysframework.syspanel.com.br/public">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
6 - Criar DB
7 - Configure .ENV

## Features

Core:

* Class SysLogger
* Class SysORM
* Class SysTE
* Class SysCli
* Class SysEnv
* Class SysImages
* Class SysSanitize
* Class Translator
* Class Validations
* Class SysMail
* Class Security
* Class SysRouter
* Class SysTables

Helpers:

* assets
* dd()
* sanitizeMiddleware()
* sanitize()
* generateCsrfToken()
* checkCsrfToken()
* old()
* bcrypt()
* back()
* e()
* blank()
* filled()

## Componentes externos

* twbs/bootstrap https://github.com/twbs/bootstrap MIT license
* php-di/php-di https://github.com/PHP-DI/PHP-DI MIT License
* sceditor/sceditor https://github.com/samclarke/SCEditor MIT License
* gilbitron/easycsrf https://github.com/gilbitron/EasyCSRF MIT License
* Symfony's Mailer https://symfony.com/doc/current/mailer.html MIT License
* guzzle/psr7 https://github.com/guzzle/psr7 MIT License

## PSR-7

https://www.php-fig.org/psr/psr-7/

## SysCli

php syscli Help 

## Suporte

Email: sysframework@syspanel.com.br

📜 Terms of Use

This project is licensed under the MIT License.

You can use, copy, modify, merge, publish, distribute, sublicense, or sell copies of the Software, as long as the license and copyright notice are included in all copies or substantial portions of the Software.

The Software is provided "as is", without warranties of any kind. For more details, see the MIT License.

For more information, contact: sysframework@syspanel.com.br

### Support the Project
If you find this project useful, consider supporting its development with a donation via PayPal:

[![Donate via PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD)

© 2025 SysFramework - Under the MIT License.

💡 Explicação do README

📌 Observações

Arquivo syscli

O arquivo syscli é o ponto de entrada para a interface de linha de comando (CLI) do SysFramework. Ele permite executar comandos administrativos e utilitários diretamente pelo terminal.

🧩 Conteúdo Atual

<?php  

/************************************************************************/
/* SysFramework - PHP Framework                                         */
/* ============================                                         */
/*                                                                      */
/* PHP Framework                                                        */
/* (c) 2025 by Marco Costa sysframework@syspanel.com.br                 */
/*                                                                      */
/* https://sysframework.syspanel.com.br                                 */
/*                                                                      */
/* This project is licensed under the MIT License.                      */
/*                                                                      */
/* For more informations: sysframework@syspanel.com.br                  */
/************************************************************************/

require_once __DIR__ . '/vendor/autoload.php';

use Core\SysCli;

$cli = new SysCli();
$cli->handle($argv);

?>

💡 Explicação do Arquivo

📌 Observações

Classe Alert em /app/Components/Alert/Alert.php

A classe Alert é responsável por renderizar componentes de alerta reutilizáveis na interface do SysFramework. Ela utiliza o template Blade localizado em resources/views/components/Alert.blade.php.

🧩 Propriedades

🛠️ Métodos

💡 Exemplo de Uso

use App\Components\Alert;

// Criar um alerta de sucesso
$alert = new Alert(['type' => 'success', 'message' => 'Operação realizada com sucesso!']);
echo $alert->render();

// Criar um alerta de erro
$alert = new Alert(['type' => 'error', 'message' => 'Ocorreu um erro!']);
echo $alert->render();

📌 Observações

Classe MakeClientTableCommand em /app/Console/Commands/MakeClientTableCommand.php

Esta classe é responsável por criar a tabela clients no banco de dados e inserir clientes aleatórios para testes. É uma implementação de comando que pode ser executada pelo SysCli.

🧩 Propriedades

🛠️ Métodos

💡 Exemplo de Uso

use App\Console\MakeClientTableCommand;

// Supondo que $pdo seja uma instância válida de PDO
$command = new MakeClientTableCommand($pdo);
$command->execute();

📌 Observações

Classe MakeUserTableCommand em /app/Console/Commands/MakeUserTableCommand.php

Esta classe é responsável por criar a tabela users no banco de dados e inserir usuários aleatórios para testes. É uma implementação de comando que pode ser executada via SysCli.

🧩 Propriedades

🛠️ Métodos

💡 Exemplo de Uso

use App\Console\MakeUserTableCommand;

// Supondo que $pdo seja uma instância válida de PDO
$command = new MakeUserTableCommand($pdo);
$command->execute();

📌 Observações

Controller ApiUserController em /app/Controllers/Api/ApiUserController.php

Este controller fornece endpoints API RESTful para manipulação de usuários. Ele herda de SysController e utiliza o model User.

🛠️ Métodos

💡 Exemplo de Uso via API

// Listar todos os usuários
GET /api/users

// Visualizar um usuário específico
GET /api/users/{id}

// Criar um novo usuário
POST /api/users
Body: { "firstname": "John", "lastname": "Doe", "email": "john@example.com", ... }

// Atualizar usuário existente
PUT /api/users/{id}
Body: { "firstname": "Jane" }

// Deletar usuário
DELETE /api/users/{id}

📌 Observações

Controller AuthController em /app/Controllers/AuthController.php

Este controller gerencia todo o fluxo de autenticação do sistema, incluindo registro, login, logout, redefinição de senha e confirmação de email. Ele herda de BaseController e utiliza diversos serviços, logger e templates do SysTE.

🛠️ Métodos

💡 Fluxo de Trabalho

  1. Usuário acessa /register → formulário de registro.
  2. Submete dados → newregister() valida, cria registro e envia email de confirmação.
  3. Email contém token → usuário acessa link → confirm_email() confirma registro.
  4. Login → gologin() valida email e senha, inicia sessão.
  5. Redefinição de senha → forgotPassword() + sendResetLink() + goresetPassword().
  6. Reenvio de confirmação → resendConfirmation() + goresendConfirmation() + resendConfirmationEmail().

📌 Observações

Controller ClientController em /app/Controllers/ClientController.php

Este controller gerencia todas as operações relacionadas aos clientes do sistema, incluindo CRUD (Create, Read, Update, Delete). Ele herda de BaseController e utiliza SysTE para renderizar templates, SysLogger para registro de logs, e os objetos Request e Response para manipulação de requisições e respostas.

🛠️ Métodos

🔹 index()

Lista todos os clientes e renderiza a view clients.index.

public function index() {
    $this->logger->info('(clients.index) - Carregando lista de clientes.');
    $clients = Client::all();
    return $this->response->send($this->sysTE->render('clients.index', ['clients' => $clients]));
}

🔹 create()

Exibe o formulário para criação de um novo cliente (clients.create).

public function create() {
    return $this->response->send($this->sysTE->render('clients.create'));
}

🔹 store()

Recebe dados do formulário via POST, cria um cliente no banco e redireciona para a lista.

public function store() {
    $data = $this->request->post();
    $data['password'] = password_hash($data['password'], PASSWORD_BCRYPT);
    Client::create($data);
    return $this->response->redirect('/clients');
}

🔹 edit($id)

Exibe formulário de edição do cliente identificado pelo $id (clients.edit).

public function edit($id) {
    $client = Client::find($id);
    return $this->response->send($this->sysTE->render('clients.edit', ['client' => $client]));
}

🔹 update($id)

Atualiza os dados do cliente identificado pelo $id com os dados do POST e redireciona para a lista.

public function update($id) {
    $data = $this->request->post();
    $data['password'] = password_hash($data['password'], PASSWORD_BCRYPT);
    $client = Client::find($id);
    if ($client) {
        $client->update($data);
    }
    return $this->response->redirect('/clients');
}

🔹 show($id)

Exibe detalhes de um cliente específico (clients.show).

public function show($id) {
    $client = Client::find($id);
    return $this->response->send($this->sysTE->render('clients.show', ['client' => $client]));
}

🔹 delete($id)

Remove o cliente do banco de dados e redireciona para a lista de clientes.

public function delete($id) {
    Client::destroy($id);
    return $this->response->redirect('/clients');
}

💡 Fluxo de Trabalho

  1. Acessar /clients → lista de clientes.
  2. Criar novo cliente → /clients/create → enviar formulário → store().
  3. Editar cliente → /clients/edit/{id} → atualizar dados → update().
  4. Visualizar cliente → /clients/show/{id} → detalhes do cliente.
  5. Deletar cliente → /clients/delete/{id} → remove do banco.

📌 Observações

Controller HomeController em /app/Controllers/HomeController.php

O HomeController gerencia a página inicial e exemplos do sistema. Ele herda de BaseController e utiliza SysTE para renderizar templates, além de SysLogger para registro de logs.

🛠️ Propriedades

🔹 __construct()

Construtor do controller, responsável por inicializar o SysTE e o SysLogger.

public function __construct() {
    $this->sysTE = new SysTE(VIEWS_PATH, VIEWSCACHE_PATH);
    $this->logger = new SysLogger();
}

🔹 index()

Método principal que exibe a página inicial do sistema.

public function index() {
    $logger = new SysLogger();
    $logger->info('(home.index) - Esta é uma mensagem de informação.');
    echo $this->sysTE->render('home.index');
}

🔹 example()

Método de exemplo para demonstração de envio de dados para a view.

public function example() {
    $logger = new SysLogger();
    $logger->info('(home.example) - Esta é uma mensagem de informação.');

    $data = [
        'user' => ['name' => 'João', 'is_admin' => true],
        'items' => ['Item 1', 'Item 2', 'Item 3']
    ];

    echo $this->sysTE->render('home.example', $data);
}

🔹 syste()

Método de exemplo mostrando envio de dados simples para a view home.syste.

public function syste() {
    $logger = new SysLogger();
    $logger->info('(home.syste) - Esta é uma mensagem de informação.');

    $data = ['name' => 'Marco Costa'];

    echo $this->sysTE->render('home.syste', $data);
}

🔹 systables()

Método que renderiza a view syscss.systables, utilizada para demonstração de tabelas ou componentes CSS do sistema.

public function systables() {
    $logger = new SysLogger();
    $logger->info('(home.systables) - Esta é uma mensagem de informação.');

    echo $this->sysTE->render('syscss.systables');
}

💡 Observações

💡 Fluxo de Trabalho

  1. Acessar /home/index → página inicial.
  2. Acessar /home/example → demonstra dados de usuário e lista de itens.
  3. Acessar /home/syste → demonstra envio de dados simples para template.
  4. Acessar /home/systables → exibe tabela ou componentes CSS do sistema.

Middleware ApiAuthMiddleware em /app/Middlewares/ApiAuthMiddleware.php

O ApiAuthMiddleware é responsável por interceptar requisições para rotas de API e verificar se o usuário está autorizado a acessar os recursos, utilizando tokens de autenticação (JWT, OAuth ou outro método). Ele atua como um filtro antes que a requisição chegue ao controller.

🛠️ Métodos

🔹 handle($request, $next)

public function handle($request, $next) {
    $token = $request->getHeader('Authorization');

    if ($this->validateToken($token)) {
        return $next($request); // Passa a requisição adiante para o próximo middleware ou controller
    }

    return json_encode(['error' => 'Unauthorized'], 401); // Retorna erro 401 se não autorizado
}

🔹 validateToken($token)

private function validateToken($token) {
    // Exemplo simples de validação
    return $token === 'valid_token';
}

💡 Observações

💡 Fluxo de Trabalho

  1. Requisição chega a uma rota protegida.
  2. Middleware ApiAuthMiddleware executa handle().
  3. Recupera o token do cabeçalho Authorization.
  4. Chama validateToken() para validar o token.
  5. Se válido → requisição continua para o próximo middleware ou controller.
  6. Se inválido → retorna JSON com erro 401.

Middleware AuthMiddleware em /app/Middlewares/AuthMiddleware.php

O AuthMiddleware protege rotas que requerem autenticação de usuário. Ele verifica se há um usuário logado na sessão antes de permitir o acesso ao controller. Atua como um filtro de autenticação antes que a requisição chegue ao controller.

🛠️ Método

🔹 handle($request, $next)

public function handle($request, $next) {
    if (!isset($_SESSION['user_id'])) {
        // Redirecionar ou retornar erro se não autenticado
        return ['error' => 'Você não está autenticado.'];
    }
    return $next($request); // Permite continuar para o próximo middleware ou controller
}

💡 Observações

💡 Fluxo de Trabalho

  1. Requisição chega a uma rota protegida.
  2. Middleware AuthMiddleware executa handle().
  3. Verifica se $_SESSION['user_id'] está definido.
  4. Se definido → requisição continua para o próximo middleware ou controller.
  5. Se não definido → retorna erro ou redireciona para login.

Model Auth em /app/Models/Auth.php

O Auth é o modelo responsável por gerenciar usuários no sistema. Ele estende SysORM, que oferece métodos básicos de acesso ao banco de dados. Este modelo lida com criação, atualização, confirmação de usuários, tokens de verificação e redefinição de senha.

🛠️ Propriedades

🔹 Métodos Principais

create($data)

Cria um novo usuário no banco de dados.

public static function create($data) {
    // Insere dados do usuário na tabela
    // Retorna o ID do registro criado
}

saveConfirmationToken($userId, $token)

Salva o token de verificação para confirmação de email do usuário.

public function saveConfirmationToken($userId, $token) {
    // Atualiza o campo verification_token do usuário
    // Retorna verdadeiro se atualização foi bem-sucedida
}

verifyToken($userId, $token)

Verifica se o token de confirmação é válido para o usuário informado.

public static function verifyToken($userId, $token) {
    // Retorna verdadeiro se o token corresponder ao registro no banco
}

confirmUser($userId)

Confirma o usuário, marcando confirmed_at e removendo o token.

public static function confirmUser($userId) {
    // Atualiza o usuário como confirmado
    // Retorna verdadeiro se a confirmação for bem-sucedida
}

where($column, $value)

Busca todos os usuários que correspondem a um determinado valor em uma coluna.

public static function where($column, $value) {
    // Retorna array com todos os registros encontrados
}

saveResetToken($userId, $token)

Salva um token de redefinição de senha e define validade de 1 hora.

public static function saveResetToken($userId, $token) {
    // Atualiza reset_token e reset_expires
    // Retorna verdadeiro se a atualização for bem-sucedida
}

verifyResetToken($userId, $token)

Verifica se o token de redefinição de senha ainda é válido.

public static function verifyResetToken($userId, $token) {
    // Retorna verdadeiro se o token existir e não estiver expirado
}

updatePassword($userId, $newPassword)

Atualiza a senha do usuário e remove o token de redefinição.

public static function updatePassword($userId, $newPassword) {
    // Atualiza o campo password e limpa reset_token e reset_expires
}

💡 Observações

Model Auth em /app/Models/Auth.php

O Auth é o modelo responsável por gerenciar usuários no sistema. Ele estende SysORM, que oferece métodos básicos de acesso ao banco de dados. Este modelo lida com criação, atualização, confirmação de usuários, tokens de verificação e redefinição de senha.

🛠️ Propriedades

🔹 Métodos Principais

create($data)

Cria um novo usuário no banco de dados.

public static function create($data) {
    // Insere dados do usuário na tabela
    // Retorna o ID do registro criado
}

saveConfirmationToken($userId, $token)

Salva o token de verificação para confirmação de email do usuário.

public function saveConfirmationToken($userId, $token) {
    // Atualiza o campo verification_token do usuário
    // Retorna verdadeiro se atualização foi bem-sucedida
}

verifyToken($userId, $token)

Verifica se o token de confirmação é válido para o usuário informado.

public static function verifyToken($userId, $token) {
    // Retorna verdadeiro se o token corresponder ao registro no banco
}

confirmUser($userId)

Confirma o usuário, marcando confirmed_at e removendo o token.

public static function confirmUser($userId) {
    // Atualiza o usuário como confirmado
    // Retorna verdadeiro se a confirmação for bem-sucedida
}

where($column, $value)

Busca todos os usuários que correspondem a um determinado valor em uma coluna.

public static function where($column, $value) {
    // Retorna array com todos os registros encontrados
}

saveResetToken($userId, $token)

Salva um token de redefinição de senha e define validade de 1 hora.

public static function saveResetToken($userId, $token) {
    // Atualiza reset_token e reset_expires
    // Retorna verdadeiro se a atualização for bem-sucedida
}

verifyResetToken($userId, $token)

Verifica se o token de redefinição de senha ainda é válido.

public static function verifyResetToken($userId, $token) {
    // Retorna verdadeiro se o token existir e não estiver expirado
}

updatePassword($userId, $newPassword)

Atualiza a senha do usuário e remove o token de redefinição.

public static function updatePassword($userId, $newPassword) {
    // Atualiza o campo password e limpa reset_token e reset_expires
}

💡 Observações

Service AuthService em /app/Services/AuthService.php

O AuthService é responsável por gerenciar toda a lógica de autenticação e registro de usuários. Ele atua como intermediário entre os models (User, Auth) e os controladores, abstraindo funcionalidades de login, logout, registro e recuperação de senha.

🛠️ Métodos Principais

attempt(array $credentials)

Tenta autenticar um usuário com as credenciais fornecidas.

public function attempt(array $credentials) {
    return Auth::attempt($credentials); // Retorna verdadeiro se autenticação for bem-sucedida
}

logout()

Encerra a sessão do usuário logado.

public function logout() {
    Auth::logout(); // Limpa a sessão e cookies relacionados
}

user()

Retorna os dados do usuário atualmente autenticado.

public function user() {
    return Auth::user(); // Retorna objeto do usuário logado ou null se não houver
}

register(array $data)

Cria um novo usuário, aplicando hash na senha antes de salvar.

public function register(array $data) {
    $data['password'] = Hash::make($data['password']); // Criptografa a senha
    return User::create($data); // Salva o usuário no banco
}

recoverPassword($email)

Inicia o processo de recuperação de senha para o usuário informado.

public function recoverPassword($email) {
    // Implementa lógica de envio de e-mail com token de redefinição
}

confirmRegistration($token)

Confirma o registro de um usuário usando o token de verificação enviado por e-mail.

public function confirmRegistration($token) {
    // Implementa lógica para validar token e confirmar usuário
}

💡 Observações

Service SysCacheService em /app/Services/SysCacheService.php

O SysCacheService é responsável por gerenciar cache de dados no sistema utilizando arquivos no servidor. Ele permite armazenar, recuperar e limpar dados temporários, melhorando a performance ao evitar consultas ou cálculos repetitivos.

🛠️ Propriedades

🛠️ Métodos Principais

__construct($cacheDir)

Construtor que define o diretório de cache e cria a pasta caso não exista.

public function __construct($cacheDir = __DIR__ . '/../cache') {
    $this->cacheDir = $cacheDir;
    if (!is_dir($this->cacheDir)) {
        mkdir($this->cacheDir, 0777, true); // Cria a pasta de cache
    }
}

set($key, $data, $ttl)

Armazena dados no cache com uma chave única e tempo de expiração (TTL).

public function set($key, $data, $ttl = 3600) {
    $file = $this->getCacheFile($key);
    $cacheData = [
        'expires' => time() + $ttl,
        'data' => $data
    ];
    file_put_contents($file, serialize($cacheData)); // Salva no arquivo
}

get($key)

Recupera dados do cache usando a chave. Retorna null se o cache expirou ou não existe.

public function get($key) {
    $file = $this->getCacheFile($key);
    if (!file_exists($file)) return null;

    $cacheData = unserialize(file_get_contents($file));
    if ($cacheData['expires'] < time()) {
        unlink($file); // Remove cache expirado
        return null;
    }

    return $cacheData['data'];
}

clear($key)

Remove o cache correspondente a uma chave específica.

public function clear($key) {
    $file = $this->getCacheFile($key);
    if (file_exists($file)) unlink($file);
}

clearAll()

Limpa todos os arquivos de cache no diretório.

public function clearAll() {
    foreach (glob($this->cacheDir . '/*') as $file) {
        unlink($file); // Remove todos os arquivos
    }
}

getCacheFile($key)

Gera o caminho do arquivo de cache baseado na chave, usando md5 para criar nomes únicos.

private function getCacheFile($key) {
    return $this->cacheDir . '/' . md5($key) . '.cache';
}

💡 Observações

Service SysQueueService em /app/Services/SysQueueService.php

O SysQueueService gerencia uma fila de tarefas simples utilizando um arquivo JSON no servidor. Ele permite adicionar tarefas à fila e processá-las posteriormente, garantindo que execuções longas ou assíncronas possam ser controladas.

🛠️ Propriedades

🛠️ Métodos Principais

__construct($queueFile)

Construtor que define o arquivo da fila e cria o arquivo caso não exista.

public function __construct($queueFile = __DIR__ . '/../cache/queue.json') {
    $this->queueFile = $queueFile;
    if (!file_exists($this->queueFile)) {
        file_put_contents($this->queueFile, json_encode([])); // Cria arquivo vazio
    }
}

push($task)

Adiciona uma nova tarefa à fila.

public function push($task) {
    $queue = json_decode(file_get_contents($this->queueFile), true);
    $queue[] = $task; // Adiciona a tarefa ao array
    file_put_contents($this->queueFile, json_encode($queue)); // Salva novamente no arquivo
}

process()

Processa todas as tarefas da fila. Após o processamento, a fila é esvaziada.

public function process() {
    $queue = json_decode(file_get_contents($this->queueFile), true);
    foreach ($queue as $task) {
        // Implementar processamento da tarefa aqui
        // Ex: chamar função, executar comando, enviar e-mail etc.
    }
    file_put_contents($this->queueFile, json_encode([])); // Limpa a fila
}

💡 Observações

Request UserRequest em /app/Requests/UserRequest.php

O UserRequest é responsável por centralizar a validação e autorização de dados enviados em formulários relacionados ao usuário. Ele herda da classe Request do SysORM, que fornece métodos para validação de dados e autorização.

🛠️ Métodos Principais

rules()

Define as regras de validação para os dados do usuário.

public function rules() {
    return [
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users,email,' . ($this->user() ? $this->user()->id : ''),
        'password' => 'required|string|min:8|confirmed',
        // Adicione outras regras conforme necessário
    ];
}

Explicação:

authorize()

Define se o usuário tem permissão para realizar a requisição.

public function authorize() {
    return true; // Permite acesso para todos
}

validated()

Retorna os dados validados após a execução das regras.

public function validated() {
    return parent::validated();
}

💡 Observações

Rotas do Sistema routes/web.php

Este arquivo define todas as rotas do SysFramework, incluindo rotas públicas, rotas protegidas por middleware, autenticação, CRUD de clientes e páginas administrativas. Ele utiliza a classe SysRouter para registrar rotas e grupos de rotas, permitindo prefixos e middlewares.

🛠️ Rotas Públicas

📋 Rotas de Clientes

Grupo de rotas com prefixo /clients, correspondendo ao CRUD do ClientController.

🛡️ Rotas Administrativas

Grupo protegido pelo AuthMiddleware, prefixo /admin:

🔐 Autenticação

🔄 Recuperação de Senha

📦 Outras Funcionalidades

💡 Observações