slenix/slenix

Slenix é um micro framework MVC flexível para construir APIs REST robustas e aplicações web dinâmicas com facilidade.

v1.3 2025-08-18 11:40 UTC

This package is auto-updated.

Last update: 2025-08-18 11:55:03 UTC


README

Slenix Logo

🌌 Slenix Framework

Um micro framework PHP leve, elegante e poderoso baseado no padrão MVC

GitHub Stars Packagist Version License PHP Version

📖 Sobre o Slenix

O Slenix Framework é um micro framework PHP projetado para desenvolvedores que buscam simplicidade, desempenho e flexibilidade. Baseado na arquitetura MVC (Model-View-Controller), ele oferece ferramentas essenciais para construir aplicações web e APIs de forma rápida e eficiente.

✨ Recursos Principais

  • 🚀 Roteamento Simples: Defina rotas dinâmicas com parâmetros e grupos.
  • 🗃️ ORM Integrado: Gerencie bancos de dados com modelos intuitivos.
  • 📄 Template Luna: Crie views dinâmicas com sintaxe limpa e poderosa.
  • 🛠️ Celestial CLI: Automatize a criação de Models, Controllers e inicialização do servidor.
  • Leve e Rápido: Sem dependências pesadas, ideal para projetos de pequeno a médio porte.
  • 📤 Upload de Arquivos: Suporte simplificado para upload de arquivos.
  • 🌐 Requisições HTTP: Integração robusta com a classe HttpClient para consumir APIs.

📋 Pré-requisitos

  • PHP: 8.0 ou superior
  • Extensão PDO: Habilitada (necessária para o ORM)
  • Composer: Recomendado para autoload
  • Servidor Web: Apache, Nginx ou servidor embutido do PHP (celestial serve)

⚙️ Instalação

1. Instalar via Composer

composer require slenix/slenix

2. Clonar o Repositório

git clone https://github.com/claudiovictors/slenix.git

3. Criar um Projeto com Composer

composer create-project slenix/slenix [project-name]

4. Instalar Dependências

composer install

5. Iniciar o Servidor Embutido

php celestial serve

Acesse http://127.0.0.1:8080 no navegador para ver a página de boas-vindas.

Nota: Se estiver usando Apache ou Nginx, configure o diretório public/ como raiz do documento.

🚀 Primeiros Passos

📜 Definindo Rotas

Edite o arquivo routes/web.php para criar rotas simples e dinâmicas:

use Slenix\Http\Message\Router;

Router::get('/', function($request, $response, $param){
    $response->write('Hello, Slenix');
})->name('page.home');

Router::get('/user/{id}', function ($request, $response, $params) {
    $response->json(['id' => $params['id'], 'name' => 'Slenix']);
});

🗂️ Grupos de Rotas

Organize rotas relacionadas com prefixos ou middlewares:

use Slenix\Http\Message\Router;

Router::group(['prefix' => '/api'], function () {
    Router::get('/users', function (Request $request, Response $response) {
        $allUsers = User::all();
        return $response->json([
            'users' => $allUsers
        ]);
    });
});

🔒 Rotas com Middlewares

Proteja suas rotas com middlewares personalizados:

use Slenix\Http\Message\Router;
use Slenix\Middlewares\AuthMiddleware;

Router::get('/profile/{user_id}', function($request, $response, $param){
    $id = $param['user_id'];

    $user_id = User::where('id',  $id)->first();

    if(!$user_id):
        $response->status(404)->json(['message' => 'User not Exist']);
    endif;

    $response->status(200)->json(['user' => $user_id]);

}, [AuthMiddleware::class]);

📄 Usando o Luna Templates

O Luna Templates é o motor de templates do Slenix, inspirado no Blade, com sintaxe limpa e poderosa.

Exemplo de Rota com View

Router::get('/users/{user_id}', function ($req, $res, $args) {
    $user = User::find($args['user_id']);

    if (!$user):
        $res->status(404)->json(['message' => 'Usuário não encontrado!']);
    endif;

    return view('pages.user', compact('user'));
});

Exemplo de View (views/pages/user.luna.php)

<h1>Perfil do Usuário</h1>

@if ($user)
    <h2>{{ $user->name }}</h2>
    <p>Email: {{ $user->email }}</p>
@else
    <p>Usuário não encontrado.</p>
@endif

@foreach ($user->posts as $post)
    <div>
        <h3>{{ $post->title }}</h3>
        <p>{{ $post->content }}</p>
    </div>
@endforeach

📧 Envio de E-mails

O Slenix suporta o envio de e-mails personalizados utilizando servidores SMTP como Gmail, Outlook, ou outros. Recomendamos o uso de:

  • msmtp e msmtp-mta
  • postfix

Exemplo de Envio de E-mail

$email = new Email();

$sendEmail = $email
    ->form('contato@slenix.com', 'Equipa Slenix')
    ->to('user@example.com')
    ->subject('Welcome Slenix!')
    ->message('<h1>Olá!</h1><p>Bem-vindo ao Slenix</p>')
    ->send();

if($sendEmail):
    Session::flash('success', 'E-mail enviado com sucesso!');
else:
    Session::flash('success', 'Erro ao enviar e-mail!');
endif;

🌐 Usando a Classe HttpClient

A classe HttpClient permite realizar requisições HTTP de forma fluida e robusta, com suporte a métodos HTTP, autenticação, cabeçalhos personalizados, retries e eventos.

Exemplo 1: Consumindo uma API JSON

use Slenix\Http\Message\HttpClient;

$client = HttpClient::make()
    ->baseUrl('https://api.example.com')
    ->withHeader('Accept', 'application/json')
    ->withAuth('bearer', 'seu-token-aqui')
    ->withRetries(2, 1000);

$response = $client->get('/users', ['page' => 1, 'limit' => 10]);

if ($response->getStatusCode() === 200) {
    $users = $response->getJson();
    print_r($users);
} else {
    echo "Erro: " . $response->getBody();
}

Exemplo 2: Enviando um Formulário com Arquivo

use Slenix\Http\Message\HttpClient;

$client = HttpClient::make()
    ->baseUrl('https://api.example.com')
    ->withAuth('basic', ['admin', 'secret'])
    ->asForm([
        'file' => new CURLFile('/caminho/para/arquivo.pdf'),
        'description' => 'Documento importante',
    ]);

$response = $client->post('/upload');

if ($response->getStatusCode() === 201) {
    echo "Arquivo enviado com sucesso!";
} else {
    echo "Erro: " . $response->getBody();
}

Exemplo 3: Usando Callbacks para Debugging

use Slenix\Http\Message\HttpClient;

$client = HttpClient::make()
    ->baseUrl('https://api.example.com')
    ->on('before', function ($method, $url, $body) {
        echo "Enviando $method para $url com corpo: " . json_encode($body) . "\n";
    })
    ->on('after', function ($response) {
        echo "Resposta recebida com status: " . $response->getStatusCode() . "\n";
    })
    ->on('error', function ($exception) {
        echo "Erro na requisição: " . $exception->getMessage() . "\n";
    });

$response = $client->get('/posts');

Consumindo a API publica do TMDB

Router::get('/', function (Request $request, Response $response) {
    
    $baseUrl = 'https://api.themoviedb.org';

    $token = 'SUA_CHAVE_SECRETA'; // Recomando usar no no arquivo .env

    $httpClientInstance = HttpClient::make()
                        ->baseUrl($baseUrl)
                        ->withAuth('bearer', $token)
                        ->get('/3/movie/11');

    $data = $httpClientInstance->getBody();

    $response->json($data);
});

🛠️ Usando a Celestial CLI

A Celestial CLI é uma ferramenta poderosa para agilizar o desenvolvimento. Veja os principais comandos:

Iniciar o Servidor

php celestial serve

Criar um Controller

php celestial make:controller UserController

Criar um Model

php celestial make:model User

Listar Comandos Disponíveis

php celestial list

🗃️ Configuração do Banco de Dados

Configure o acesso ao banco de dados no arquivo .env:

# Configurações Gerais
APP_DEBUG=true
APP_URL=http://localhost:8080

# Conexão com Banco de Dados
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_NAME=slenix_db
DB_USERNAME=seu_usuario
DB_PASSWORD=sua_senha

Dica: Defina APP_DEBUG=true para habilitar a tela de erros durante o desenvolvimento.

📜 Licença

O Slenix Framework é licenciado sob a MIT License.

Feito com 🖤 por Cláudio Victor