Documentação

Bem-vindo à documentação oficial do Slendie. Aqui você aprenderá como instalar, configurar e desenvolver aplicações modernas com nosso framework.


# Instalação

Comece criando um novo projeto via Composer. O Slendie configura automaticamente toda a estrutura necessária.

composer create-project slendie/slendie meu-projeto
cd meu-projeto

Em seguida, configure seu ambiente e instale as dependências:

1. Configuração do Ambiente

cp .env.example .env

2. Migrações de Banco de Dados

php scripts/migrate.php

3. Frontend Assets

npm install && npm run dev

# Arquitetura MVC

O Slendie segue o padrão de arquitetura Model-View-Controller (MVC), separando a lógica da aplicação em três camadas interconectadas.

Model

Gerencia os dados e regras de negócio. Interage diretamente com o banco de dados.

View

A camada de apresentação. É o que o usuário vê (HTML renderizado pelo Blade).

Controller

Recebe as requisições, processa dados usando Models e retorna Views.


# Rotas & Controllers

As rotas definem como sua aplicação responde às requisições HTTP, mapeando URLs para métodos em seus Controllers.

Definindo Rotas

As rotas são configuradas no arquivo config/routes.php. Cada rota é um array contendo método, caminho e handler.

return [
    [
        'method' => 'GET',
        'path' => '/produtos',
        'handler' => 'App\Controllers\ProductController@index',
        'middlewares' => []
    ],
    [
        'method' => 'POST',
        'path' => '/produtos',
        'handler' => 'App\Controllers\ProductController@store',
        'middlewares' => ['auth']
    ]
];

Controllers

Os controllers agrupam a lógica de requisição relacionada. Eles devem estender a classe base Slendie\Controllers\Controller.

namespace App\Controllers;

use Slendie\Controllers\Controller;

class ProductController extends Controller
{
    public function index()
    {
        // Acessa dados da requisição
        $params = $this->request()->getParams();
        
        // Renderiza uma view
        return $this->render('products.index', [
            'products' => ['Notebook', 'Mouse']
        ]);
    }

    public function store()
    {
        // Redireciona para outra URL
        return $this->redirect('/produtos');
    }
}

Funcionalidades Base

$this->render($view, $data)

Renderiza uma view Blade. Injeta automaticamente erros de formulário e mensagens de sucesso.

$this->redirect($url)

Realiza um redirecionamento HTTP.

$this->request()

Retorna a instância da requisição atual para acesso a parâmetros e inputs.


# Views & Blade

O Slendie possui um motor de template próprio, inspirado no Blade do Laravel, mas leve e eficiente. As views ficam em views/ e devem ter a extensão .blade.php.

Renderizando Views

use Slendie\Framework\Blade;

public function index() {
    $blade = new Blade();
    // Renderiza views/home.blade.php passando dados
    echo $blade->render('home', ['title' => 'Bem-vindo']);
}

Sintaxe de Exibição

Imprime o valor sem escapar (raw output). Use para HTML confiável.

Imprime o valor escapado (safe output). Converte caracteres especiais em entidades HTML.

Estruturas de Controle

Suporte completo para condicionais e loops:



        <div></div>
    @endforeach
@else
    <p>Nenhum usuário encontrado.</p>
@endif

Layouts e Herança

Crie layouts reutilizáveis com @extends, @section e @yield.

views/layouts/app.blade.php
<html>
    <head>

    </head>
    <body>

    </body>
</html>
views/home.blade.php



    <h1>Página Inicial</h1>

Diretivas Úteis

  • Inclui outra view. Suporta notação com ponto.

  • Integração com Vite. Gera tags de script e link CSS.

  • Gera um campo input hidden com o token CSRF para formulários.

  • ...

    Verifica erros de validação. Disponibiliza a variável $message.


# Models e Banco de Dados

Os Models representam tabelas no seu banco de dados e facilitam a manipulação de registros. Eles devem estender a classe base Slendie\Models\Model.

namespace App\Models;

use Slendie\Models\Model;

class User extends Model
{
    // Define a tabela associada ao model
    protected static string $table = 'users';
}

Operações CRUD

Métodos estáticos para criar, ler, atualizar e deletar registros:

// Criar
$id = User::create([
    'name' => 'John Doe',
    'email' => 'john@example.com'
]);

// Ler
$user = User::find(1); // Retorna array ou null
$allUsers = User::all(); // Retorna array de arrays

// Atualizar
User::update(1, ['name' => 'John Updated']);

// Deletar
User::delete(1);

Query Builder

Para consultas mais complexas, utilize os métodos de construção de query. Eles retornam uma instância fluente que deve ser finalizada com execute() ou first().

// Filtrar e Ordernar
$users = User::where('active', 1)
             ->orderBy('created_at', 'DESC')
             ->limit(10)
             ->execute(); // Retorna array

// Buscar um único registro com condição
$user = User::where('email', 'john@example.com')->first();

// Condições complexas
$users = User::where('role', 'admin')
             ->orWhere('role', 'editor')
             ->execute();

Métodos Disponíveis

where($col, $op, $val)

Adiciona cláusula WHERE. O operador é opcional (padrão '=').

orWhere($col, $op, $val)

Adiciona cláusula OR WHERE.

orderBy($col, $dir)

Ordena os resultados (ASC ou DESC).

limit($int)

Limita o número de registros retornados.

groupBy($col)

Agrupa resultados por uma coluna.

execute()

Executa a query e retorna todos os resultados.

first()

Executa a query e retorna apenas o primeiro resultado.


# Changelog

Registro de todas as mudanças, melhorias e correções em cada versão do Slendie.

v3.0.0

Atual 2024
  • + Integração completa com Vite para assets frontend
  • + Motor Blade melhorado com novas diretivas
  • + Sistema de rotas baseado em arrays de configuração
  • ~ Melhorias de performance no sistema de rotas
  • ~ Otimizações no Query Builder

v2.0.0

2023
  • + Sistema de middleware implementado
  • + Proteção CSRF automática
  • ~ Refatoração da arquitetura MVC

v1.0.0

2022
  • + Lançamento inicial do framework
  • + Sistema básico de rotas e controllers
  • + Motor Blade básico
  • + ORM simples com Query Builder

Legenda: + Nova funcionalidade ~ Melhoria - Remoção ! Correção