Minimal é um framework simples e leve para páginas únicas, ideal para projetos pequenos, dashboards e ferramentas SPA.
- View engine própria
- ORM com sintaxe inspirada no Laravel
- Integração com Vite e hot reload
- Suporte a testes com Pest
- TailwindCSS e Alpine.js pré-configurados
Para instalar, utilize o comando:
composer create-project viniciuscoutinh0/minimal-starter
Após a instalação, copie o arquivo .env.example para .env:
cp .env.example .env
Você pode registrar e renderizar views de forma simples. O caminho padrão onde os arquivos são armazenados é:
resources/views
No arquivo app.php:
$app->view('path/to/view')->name('name');No index.php, você pode renderizar suas views da seguinte forma:
<?php View::render('welcome'); ?>Existem duas formas de passar dados para as views:
Via array diretamente no método:
$app->view('path/to/view', ['foo' => 'bar'])->name('name');Ou utilizando o método with:
$app->view('path/to/view')->with('foo', 'bar')->name('name');Você pode passar dados de forma global para todas as views utilizando o método share:
View::share('foo', 'bar');Por padrão, uma variável com a instância de
$appjá está disponível em todas as views.
As variáveis passadas para a view ficam disponíveis diretamente no arquivo de template. Por exemplo:
<?= $foo; ?>Exibe "bar"
Para utilizar o ORM, descomente a linha 11 no app.php e configure o .env com as credenciais do banco. Atualmente, o Minimal possui suporte apenas para MS SQL Server.
Exemplo de configuração:
<?php
declare(strict_types=1);
require __DIR__.'/../vendor/autoload.php';
use Viniciuscoutinh0\Minimal\Application;
$app = Application::make(dirname(__DIR__, 1));
$app->registerProvider(new Viniciuscoutinh0\Minimal\Providers\DatabaseProvider);
$app->boot();
$app->view('welcome')->name('welcome');Crie um modelo em app/Models:
<?php
namespace App\Models;
use Viniciuscoutinh0\Minimal\Database\Model;
final class User extends Model
{
// Nome da tabela
protected string $table = 'users';
// Chave primária da tabela
protected string $primaryKey = 'id';
}User::newQuery()->first(); // Retorna o primeiro resultado
User::newQuery()->find(1); // Retorna o resultado com ID 1
User::newQuery()->get(); // Retorna um array de resultadosUser::newQuery()->where('id', 2)->first();
User::newQuery()->where('id', 2)->orWhere('id', 3)->first();Você pode alterar o operador nas cláusulas where, utilizando o OperatorEnum.
Exemplo:
use Viniciuscoutinh0\Minimal\Database\Grammar\Enums\OperatorEnum;
User::newQuery()->where('foo', '%bar%', OperatorEnum::Like)->get();enum OperatorEnum: string
{
case Equal = '=';
case NotEqual = '<>';
case GreaterThan = '>';
case LessThan = '<';
case GreaterThanOrEqual = '>=';
case LessThanOrEqual = '<=';
case Like = 'like';
case NotLike = 'not like';
}Esses operadores permitem construir consultas mais precisas ao banco de dados, mantendo a clareza e segurança do código.
User::newQuery()->select('name')->where('id', 2)->first();
// Alternativas
User::newQuery()->first('name'); // SELECT name FROM users
User::newQuery()->find(1, columns: 'name');
User::newQuery()->get('name');User::newQuery()->distinct()->select('id')->get();Você pode obter dados da query string através da instância do $app:
// Exemplo de URL: ?foo=bar
$app->query()->get('foo'); // Retorna: barCaso o valor não seja encontrado, o retorno padrão será
null.
Você pode definir um valor padrão como segundo argumento:
$app->query()->get('foo', 'valor-padrao');