cafernandes / express-php-cycle-orm-extension
Cycle ORM integration for Express-PHP microframework
Requires
- php: ^8.1
- cafernandes/express-php: ^2.1.1
- cycle/annotated: ^4.3
- cycle/migrations: 3.x-dev
- cycle/orm: ^2.0
- cycle/schema-builder: ^2.0
- spiral/tokenizer: ^2.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.76
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.13
README
Integração completa e otimizada do Cycle ORM com o microframework Express-PHP, mantendo a filosofia ultraleve e performance excepcional.
⚡ Por que usar esta extensão?
- 🚀 Zero Configuration: Funciona out-of-the-box com configurações sensatas
- 🔄 Auto-Discovery: Service Provider registrado automaticamente
- 🛡️ Transaction Management: Transações automáticas com middleware inteligente
- 📊 High Performance: Otimizado para microframework ultraleve (+3x mais rápido que Laravel)
- 🧪 100% Testado: Cobertura completa de testes e análise estática PHPStan Level 8
- 🔍 Health Checks: Sistema completo de monitoramento e métricas
- 🎯 Developer Experience: IntelliSense, auto-completion, validação automática
🚀 Instalação
composer require cafernandes/express-php-cycle-orm-extension
Pronto! O Service Provider é registrado automaticamente via auto-discovery.
⚙️ Configuração Rápida
1. Configure o Banco de Dados (.env)
DB_CONNECTION=mysql DB_HOST=localhost DB_DATABASE=express_api DB_USERNAME=root DB_PASSWORD= # Cycle ORM Settings (opcionais) CYCLE_SCHEMA_CACHE=true CYCLE_AUTO_SYNC=false CYCLE_LOG_QUERIES=false
2. Crie sua Primeira Entidade
php express make:entity User
3. Sincronize o Schema
php express cycle:schema --sync
📖 Uso Básico
API REST Completa em Minutos
<?php require_once 'vendor/autoload.php'; use Express\Core\Application; use App\Models\User; $app = new Application(); // Cycle ORM já disponível automaticamente! 🎉 // Listar usuários $app->get('/api/users', function($req, $res) { $users = $req->repository(User::class)->findAll(); $res->json(['users' => $users]); }); // Criar usuário $app->post('/api/users', function($req, $res) { // Validação automática $validation = $req->validateEntity($req->entity(User::class, $req->body)); if (!$validation['valid']) { return $res->status(400)->json(['errors' => $validation['errors']]); } // Persistir com transação automática $user = $req->entity(User::class, $req->body); $req->em->persist($user); // Auto-commit via TransactionMiddleware ✨ $res->status(201)->json(['user' => $user]); }); // Buscar usuário $app->get('/api/users/:id', function($req, $res) { $user = $req->find(User::class, $req->params['id']); $res->json($user ? ['user' => $user] : ['error' => 'Not found']); }); $app->run();
Recursos Avançados
// Paginação e filtros inteligentes $app->get('/api/users/search', function($req, $res) { $query = $req->repository(User::class)->select(); // Filtros com validação automática $filters = $req->query['filters'] ?? []; $query = CycleHelpers::applyFilters($query, $filters, ['name', 'email']); // Busca full-text $search = $req->query['search'] ?? null; $query = CycleHelpers::applySearch($query, $search, ['name', 'email']); // Paginação otimizada $result = $req->paginate($query, $req->query['page'] ?? 1, 15); $res->json($result); }); // Relacionamentos complexos com eager loading $app->get('/api/users/:id/posts', function($req, $res) { $user = $req->repository(User::class) ->select() ->load('posts.comments') // Nested loading ->where('id', $req->params['id']) ->fetchOne(); $res->json(['user' => $user, 'posts_count' => count($user->posts)]); });
🛠️ Serviços Injetados Automaticamente
O middleware CycleMiddleware injeta automaticamente:
Serviço | Descrição |
---|---|
$req->orm |
Instância do Cycle ORM |
$req->em |
Entity Manager para persistência |
$req->db |
Database Manager |
$req->repository(Class) |
Obter repository para entidade |
$req->entity(Class, data) |
Criar entidade com dados |
$req->find(Class, id) |
Encontrar entidade por ID |
$req->paginate(query, page) |
Paginar resultados |
$req->validateEntity(entity) |
Validar entidade |
🔧 Comandos CLI
# Gerar entidade php express make:entity Post --migration # Gerenciar schema php express cycle:schema # Mostrar info php express cycle:schema --sync # Sincronizar php express cycle:schema --clear-cache # Migrações php express cycle:migrate # Executar php express cycle:migrate --rollback # Reverter php express cycle:migrate --status # Status # Verificar saúde do sistema php express cycle:status
📊 Performance Excepcional
Benchmarks vs Laravel + Eloquent
Operação | Express-PHP + Cycle ORM | Laravel + Eloquent | Vantagem |
---|---|---|---|
Create | 1.2ms | 3.8ms | 3.2x mais rápido |
Read | 0.8ms | 2.1ms | 2.6x mais rápido |
Update | 1.5ms | 4.2ms | 2.8x mais rápido |
Memory | 12MB | 28MB | 2.3x menos memória |
Boot Time | 15ms | 85ms | 5.7x mais rápido |
Benchmark: 1000 operações CRUD, PHP 8.1, 2.4GHz i5, 8GB RAM, SSD
🎯 Recursos Exclusivos
1. Transações Automáticas Inteligentes
$app->post('/api/bulk', function($req, $res) { // Transação iniciada automaticamente foreach ($req->body['users'] as $userData) { $user = $req->entity(User::class, $userData); $req->em->persist($user); } // Auto-commit se tudo OK, auto-rollback em erro ✨ });
2. Validação Automática de Entidades
// Validação baseada em tipos PHP 8.1+ e atributos Cycle $validation = $req->validateEntity($user, [ 'email' => ['required' => true, 'email' => true], 'name' => ['required' => true, 'min' => 2, 'max' => 100] ]);
3. Health Checks Integrados
// GET /health/cycle { "cycle_orm": "healthy", "checks": { "services": {"status": "healthy", "registered": ["ORM", "EntityManager"]}, "database": {"status": "healthy", "driver": "mysql", "query_time_ms": 1.2}, "schema": {"status": "healthy", "entities_count": 5} }, "response_time_ms": 12.5 }
🧪 Testing
# Executar todos os testes composer test # Com coverage composer test-coverage # Análise estática composer analyse # Code style composer lint composer fix # Pipeline completo make ci
📚 Documentação Completa
- 📖 Usage Guide - Guia completo de uso
- 🏗️ Advanced Features - Recursos avançados
- ⚙️ Configuration - Configuração detalhada
- 🎯 Examples - Exemplos práticos
- 🧪 Testing Guide - Como testar
📚 Guia Técnico e Quick Start
Consulte o arquivo docs/guia-tecnico-quickstart.md
para um guia completo das funcionalidades, exemplos de uso, dicas de integração e melhores práticas com o Express-PHP + Cycle ORM Extension.
Principais tópicos:
- Funcionalidades detalhadas da extensão
- Quick start para integração com Express-PHP
- Exemplos de CRUD, queries avançadas, validação, transações e mais
- Dicas de performance e troubleshooting
- Links para suporte e comunidade
🛡️ Requisitos
- PHP: 8.1 ou superior
- Express-PHP: 2.1 ou superior
- Extensões: PDO, JSON, mbstring
- Databases: MySQL, PostgreSQL, SQLite, SQL Server
🤝 Contribuindo
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/amazing-feature
) - Commit suas mudanças (
git commit -m 'Add amazing feature'
) - Push para a branch (
git push origin feature/amazing-feature
) - Abra um Pull Request
Desenvolvimento Local
# Clone o repositório git clone https://github.com/CAFernandes/express-php-cycle-orm-extension.git cd express-php-cycle-orm-extension # Instalar dependências make install-dev # Executar testes make test # Verificar qualidade do código make ci
📈 Roadmap
- v1.1: Suporte a Redis para cache de schema
- v1.2: Query Builder visual via web interface
- v1.3: Integração com GraphQL
- v1.4: Migrations automáticas baseadas em diff
- v2.0: Suporte a Event Sourcing
🏆 Reconhecimentos
- Cycle ORM - Excelente DataMapper ORM
- Express-PHP - Microframework ultraleve
- Spiral Framework - Inspiração para arquitetura
📄 Licença
Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para detalhes.
📞 Suporte
- 🐛 Issues: GitHub Issues
- 💬 Discussões: GitHub Discussions
Express-PHP + Cycle ORM = ❤️
O stack PHP mais rápido e produtivo de 2024!
⭐ Se você gostou, deixe uma estrela! ⭐