Por que PivotPHP?
O Microframework PHP Evolutivo Rápido, sem opiniões, minimalista. Construído para performance, projetado para evoluir.
🎯 Por que PivotPHP?
Depois de 6 anos construindo APIs de alta performance, sempre esbarrava na mesma parede com frameworks PHP—todos pareciam pesados, opinativos e restritivos. Vindo do Node.js, sentia falta da elegância do Express.js: simples, flexível e poderoso. Numa tarde, frustrado com mais um framework rígido me forçando a pensar do jeito dele, comecei a construir o que se tornaria o PivotPHP.
O que começou como ExpressPHP virou algo maior. Conforme o projeto evoluía, percebi que não era só sobre copiar o Express.js—era sobre criar um framework que realmente se adapta às suas necessidades. Como o DNA que se molda a diferentes ambientes, o PivotPHP se adapta ao seu projeto sem perder sua identidade central. Sem padrões forçados, sem recursos inchados, apenas PHP limpo que não atrapalha seu caminho.
O PivotPHP não te diz como construir sua API. Em vez disso, te dá as ferramentas para construí-la do seu jeito.
<?php
require 'vendor/autoload.php';
use PivotPHP\Core\Core\Application;
$app = new Application();
// Rota simples
$app->get('/ola/:nome', function ($req, $res) {
return $res->json(['mensagem' => "Olá, {$req->param('nome')}!"]);
});
// Middleware global
$app->use(function ($req, $res, $next) {
$res->header('X-Powered-By', 'PivotPHP');
return $next($req, $res);
});
// Recurso RESTful
$app->get('/usuarios/:id', function ($req, $res) {
return $res->json(['id' => (int) $req->param('id')]);
});
$app->run();
⚡ 2 minutos. É tudo que você precisa para construir sua primeira API pronta para produção.
🚀 Instalação
composer require pivotphp/core
Requisitos:
- PHP 8.1 ou superior
- Composer
Extensões Opcionais:
# Para integração com banco de dados
composer require pivotphp/pivotphp-cycle-orm
# Para middleware adicional
composer require pivotphp/middleware-collection
✨ Recursos Principais
🧬 Arquitetura Evolutiva
O PivotPHP se adapta às suas necessidades, não o contrário. Comece simples, escale complexo.
// Comece simples
$app->get('/', fn($req, $res) => $res->send('Olá Mundo'));
// Evolua naturalmente: contêiner, middleware e handlers dedicados
$app->singleton(UsuarioRepository::class, fn() => new UsuarioRepository());
$app->use('rate-limiter');
$app->get('/api/v1/usuarios', function ($req, $res) use ($app) {
return $res->json($app->make(UsuarioRepository::class)->todos());
});
⚡ Performance Blazing
6.227 req/segundo validado em Docker. Performance competitiva com excelente experiência do desenvolvedor.
// Roteamento otimizado com cache zero-config
$app->get('/rapido/:id/dados/:tipo', function($req, $res) {
// Correspondência de rotas auto-cacheada
// Extração de parâmetros type-safe
// Tratamento de resposta memory-efficient
$res->json($dados);
});
🎛️ Sintaxe Inspirada no Express.js
Se você conhece Express.js, já conhece o PivotPHP.
// Padrão de middleware familiar
$app->use(function($req, $res, $next) {
$req->startTime = microtime(true);
$next();
$duracao = microtime(true) - $req->startTime;
$res->header('X-Response-Time', $duracao . 'ms');
});
🛡️ Segurança por Design
Segurança pronta para produção sem sobrecarga de configuração.
// Auto-sanitização e validação
$app->post('/usuarios', function($req, $res) {
$dados = $req->validate([
'email' => 'required|email',
'nome' => 'required|string|max:100'
]);
// $dados é automaticamente sanitizado e validado
$usuario = Usuario::create($dados);
$res->json($usuario, 201);
});
🔧 Zero Configuração
Funciona perfeitamente fora da caixa, configurável quando você precisar.
// Nenhum arquivo de config necessário
$app = new App();
// Mas flexível quando você precisa de controle
$app = new App([
'debug' => true,
'cors' => ['origin' => 'localhost:3000'],
'cache' => ['driver' => 'redis', 'host' => 'localhost']
]);
📊 Performance
O PivotPHP entrega performance competitiva (6.227 req/s Docker validado) sem sacrificar a experiência do desenvolvedor:
| Framework | Req/seg (Docker) | Uso Memória | Tempo Resposta |
|---|---|---|---|
| Slim 4 | 6.881 | ~12MB | 0.29ms |
| Lumen | 6.322 | ~15MB | 0.31ms |
| PivotPHP | 6.227 | 1.61MB | 0.32ms |
| Flight | 3.179 | ~8MB | 10ms |
Benchmarks executados no PHP 8.2, single-threaded, resposta JSON simples. Ver benchmarks completos →
📚 Documentação
- Guia de Início Rápido - Configure e rode em 5 minutos
- Referência da API - Documentação completa de métodos
- Galeria de Exemplos - Aplicações do mundo real
- Guia de Migração - Vindo de outros frameworks
- Guia de Performance - Melhores práticas de otimização
🛠️ Exemplos
API REST com Banco de Dados
<?php
require 'vendor/autoload.php';
use PivotPHP\Core\Core\Application;
$app = new Application();
// Conexão PDO compartilhada pelo contêiner
$app->singleton(PDO::class, fn() => new PDO(
'mysql:host=localhost;dbname=meudb',
'user',
'pass',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
));
$app->get('/usuarios', function ($req, $res) use ($app) {
$usuarios = $app->make(PDO::class)
->query('SELECT id, nome FROM usuarios')
->fetchAll(PDO::FETCH_ASSOC);
return $res->json($usuarios);
});
$app->post('/usuarios', function ($req, $res) use ($app) {
$stmt = $app->make(PDO::class)->prepare('INSERT INTO usuarios (nome) VALUES (:nome)');
$stmt->execute(['nome' => $req->input('nome')]);
return $res->status(201)->json(['id' => (int) $app->make(PDO::class)->lastInsertId()]);
});
$app->run();
Microserviço com Autenticação
<?php
require 'vendor/autoload.php';
use PivotPHP\Core\Core\Application;
use PivotPHP\Core\Authentication\JWTHelper;
$app = new Application();
// Limite de requisições por IP (middleware nativo)
$app->use('rate-limiter');
// Autenticação JWT com um middleware simples
$app->use(function ($req, $res, $next) {
if (str_starts_with($req->getPath(), '/api/')) {
$token = substr($req->getHeaderLine('Authorization'), 7); // remove "Bearer "
if (!JWTHelper::isValid($token, $_ENV['JWT_SECRET'])) {
return $res->status(401)->json(['error' => 'Não autorizado']);
}
$req->setAttribute('user', JWTHelper::decode($token, $_ENV['JWT_SECRET']));
}
return $next($req, $res);
});
$app->get('/api/perfil', function ($req, $res) {
return $res->json($req->getAttribute('user'));
});
$app->run();
🌟 Ecossistema
Pacotes Oficiais
- pivotphp/pivotphp-cycle-orm - Integração com banco de dados ORM
- pivotphp/middleware-collection - Middleware comum
- pivotphp/jwt-auth - Autenticação JWT
- pivotphp/cache - Cache multi-driver
Pacotes da Comunidade
- pivotphp/testing - Utilitários de teste
- pivotphp/swagger - Documentação OpenAPI
- pivotphp/queue - Processamento de jobs em background
Navegar por todos os pacotes →
🤝 Comunidade
Junte-se à comunidade PivotPHP e ajude a moldar o futuro do desenvolvimento PHP:
- GitHub Discussions - Perguntas, ideias e anúncios
Contribuindo
O PivotPHP existe porque a comunidade PHP merece algo melhor. Seja corrigindo typos, reportando bugs ou propondo novos recursos, você está ajudando a tornar essa visão realidade.
# Faça fork e clone
git clone https://github.com/pivotphp/pivotphp-core.git
cd pivotphp-core
# Instale dependências
composer install
# Execute testes
composer test
# Faça suas mudanças e submeta um PR!
📄 Licença
O PivotPHP é um software open-source licenciado sob a licença MIT.
👨💻 Sobre o Autor
Caio Alberto Fernandes - 6 anos de experiência em desenvolvimento de APIs backend “Construindo ferramentas que se adaptam aos desenvolvedores, não o contrário.”
- GitHub: @CAFernandes
- LinkedIn: caio-alberto-fernandes
- PivotPHP Org: github.com/pivotphp
🔗 Links
- Site Oficial - Site oficial do PivotPHP
- Documentação - Documentação completa
- Packagist - Pacote Composer
- Benchmarks - Comparações de performance
Join the Evolution
PivotPHP isn’t just another framework. It’s a return to simplicity, performance, and developer happiness. Whether you’re building a simple API or a complex microservices architecture, PivotPHP adapts to your needs.
Ready to evolve your PHP development?
| Get Started Now | View on GitHub |