PHPackages                             felipe-code/mvc-base - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. felipe-code/mvc-base

ActiveProject[Framework](/categories/framework)

felipe-code/mvc-base
====================

A simple PHP MVC skeleton for learning and reuse.

4.4.6(2mo ago)134↓92.9%MITPHPPHP &gt;=8.5.0

Since Feb 19Pushed 2mo agoCompare

[ Source](https://github.com/FelipeOropeza/mvc-estrutura)[ Packagist](https://packagist.org/packages/felipe-code/mvc-base)[ RSS](/packages/felipe-code-mvc-base/feed)WikiDiscussions main Synced yesterday

READMEChangelogDependencies (14)Versions (60)Used By (0)

MVC Base — PHP Framework Full-Stack
===================================

[](#mvc-base--php-framework-full-stack)

> Micro-framework PHP puro, construído do zero, focado em performance, segurança e arquitetura moderna. Ideal para aprender como um framework funciona por dentro ou como base para aplicações reais.

[![PHP](https://camo.githubusercontent.com/9d712f4bc8e7bf767191d519f3ace2ced7a8daed8c0ecd13cdbb05cc38ce8764/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d3838393242463f6c6f676f3d706870)](https://php.net)[![License](https://camo.githubusercontent.com/ff91be63dc6bdc598756b225dd25d6b356ce52c2ddd5bb401ff62cdbcdd87d4c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e254333254137612d4d49542d677265656e)](LICENSE)[![FrankenPHP](https://camo.githubusercontent.com/aaceece987feda6fa8457ae3ef5c052d3f389fe65d5b7643d1c12d6f69ea6373/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4672616e6b656e5048502d576f726b65722532304d6f64652d6f72616e6765)](https://frankenphp.dev)[![Docker](https://camo.githubusercontent.com/676937aaf5a1616e663a1daa57646c0052e916bc51ebc3cf9588a660c72328a2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d52656164792d3234393645443f6c6f676f3d646f636b6572)](https://docker.com)

---

Por que este framework?
-----------------------

[](#por-que-este-framework)

A maioria dos tutoriais de PHP ensina a usar o Laravel e esconde toda a mágica por baixo. Este projeto foi construído para **revelar essa mágica** — cada classe representa um conceito real de arquitetura:

- O `Router` implementa *pattern matching* com regex e pipeline de middlewares
- O `Container` faz *autowiring* via PHP Reflection API (como o Laravel)
- O `Model` implementa o padrão *Active Record* com Eager Loading N+1-safe
- O `Kernel` segue o padrão *PSR-15* de pipeline de requisição

---

Features Principais
-------------------

[](#features-principais)

CategoriaFeature**HTTP**Ciclo Request → Middleware Pipeline → Response (PSR-15 feeling)**Roteamento**Parâmetros dinâmicos, grupos, rotas nomeadas, PHP 8 Attributes (`#[Get]`, `#[Post]`)**ORM**Active Record, QueryBuilder fluente, Eager Loading, Soft Deletes, Transações**Segurança**CSRF nativo, headers de segurança, Mass Assignment guard, hash de senha**Sessão**Drivers File/Redis, flash messages, regeneração de ID pós-login**Auth**JWT para APIs stateless, suporte a scaffold com `php forge setup:auth`**Validação**PHP 8 Attributes (`#[Required]`, `#[Email]`, etc) nos DTOs, Mutators**Views**Motor PHP com layouts, sections e suporte a HTMX com `isHtmx()`**Filas**Jobs assíncronos com drivers Database e Redis**Cache**Drivers File e Redis com TTL**Email**PHPMailer com SMTP configurável**Real-Time**Mercure Hub integrado + helper `broadcast()` + `mercure_listen()`**CLI (Forge)**Scaffolding, migrações, processamento de filas**Docker**FrankenPHP + Mercure + Redis + MariaDB pré-configurados**Debug**Error handler visual com stack trace, diagnóstico de banco de dados---

Instalação
----------

[](#instalação)

### Método 1: Via Composer (Recomendado)

[](#método-1-via-composer-recomendado)

```
composer create-project felipe-code/mvc-base nome-do-seu-projeto
```

O instalador interativo irá configurar o `.env` e preparar o projeto automaticamente.

### Método 2: Via Git Clone

[](#método-2-via-git-clone)

```
git clone https://github.com/FelipeOropeza/mvc-estrutura.git meu-app
cd meu-app
composer install
composer run post-create-project-cmd
```

### Método 3: Via Docker (FrankenPHP + Mercure)

[](#método-3-via-docker-frankenphp--mercure)

```
docker-compose up -d --build
```

Acesse ****. O FrankenPHP roda em Worker Mode para máxima performance (milissegundos por requisição).

---

Início Rápido (Servidor Local)
------------------------------

[](#início-rápido-servidor-local)

```
# Inicia o servidor embutido do PHP apontando para /public
composer start
```

Acesse ****.

---

CLI — Forge
-----------

[](#cli--forge)

A ferramenta de linha de comando para scaffolding e manutenção:

```
# Criação de código
php forge make:controller NomeController
php forge make:controller Api/UserController --api
php forge make:model ProdutoModel
php forge make:view secao/minha-view
php forge make:component meu-componente
php forge make:migration CreateProdutosTable
php forge make:middleware VerificarAcessoMiddleware
php forge make:rule CpfValido
php forge make:mutator LimpaCpf

# Banco de dados
php forge migrate
php forge migrate:rollback
php forge migrate:fresh

# Scaffolding de sistemas completos
php forge setup:auth       # Sistema de autenticação completo
php forge setup:api        # Scaffold de API JWT
php forge setup:aviso      # Demo de avisos em tempo real (Mercure)

# Processamento de filas
php forge queue:work

# Otimização de produção
php forge optimize         # Cache de rotas para performance máxima
php forge optimize:clear   # Limpa o cache de rotas
```

---

Estrutura de Diretórios
-----------------------

[](#estrutura-de-diretórios)

```
.
├── app/
│   ├── Controllers/     # Lógica HTTP
│   ├── Models/          # Active Record (estende Core\Database\Model)
│   ├── Middleware/      # Middlewares da aplicação
│   └── Providers/       # Service Providers
├── bootstrap/           # Inicialização do framework
├── config/              # Configurações (app, database, middleware, mail...)
├── core/                # O framework em si
│   ├── Auth/            # TokenManager (JWT)
│   ├── Cache/           # Drivers de cache (File, Redis)
│   ├── Database/        # Connection (PDO), Model, QueryBuilder
│   ├── Exceptions/      # Handler, HttpException, ValidationException
│   ├── Http/            # Request, Response, Kernel, Pipeline, Session
│   ├── Mail/            # MailManager, PHPMailer driver
│   ├── Queue/           # QueueManager, Job
│   ├── Routing/         # Router, AttributeRouteScanner, RouteCompiler
│   ├── Support/         # Container (IoC), Logger, helpers.php
│   ├── Validation/      # Validator, DataTransferObject
│   └── View/            # PhpEngine, EngineInterface
├── database/
│   └── migrations/      # Arquivos de migração
├── docs/                # Documentação completa
├── public/              # Document root (index.php, assets)
├── resources/views/     # Templates PHP
├── routes/              # web.php, api.php
├── storage/             # Logs, cache, sessões, uploads
├── forge                # CLI entry point (Linux/Mac)
└── forge.bat            # CLI entry point (Windows)

```

---

Exemplo Rápido
--------------

[](#exemplo-rápido)

**Rota + Controller + Model em 3 arquivos:**

```
// routes/web.php
Route::get('/produtos', [ProdutoController::class, 'index'])->name('produtos.index');
Route::post('/produtos', [ProdutoController::class, 'store']);
```

```
// app/Controllers/ProdutoController.php
class ProdutoController extends Controller
{
    public function index(): Response
    {
        $produtos = (new Produto())->orderBy('nome')->get();
        return view('produtos/index', compact('produtos'));
    }

    public function store(): Response
    {
        $data = validate(new ProdutoDto());
        (new Produto())->insert($data);
        return redirect(route('produtos.index'));
    }
}
```

```
// app/Models/Produto.php
class Produto extends Model
{
    protected array $fillable = ['nome', 'preco', 'categoria_id'];
    protected array $hidden   = ['custo_interno'];

    public function categoria(): ?Categoria
    {
        return $this->belongsTo(Categoria::class, 'categoria_id');
    }
}
```

---

Documentação Completa
---------------------

[](#documentação-completa)

Consulte a pasta `docs/` para guias detalhados:

➡ [Índice da Documentação](docs/framework.md)

\#Guia02[Estrutura de Diretórios](docs/02-EstruturaDeDiretorios.md)03[Roteamento Avançado](docs/03-RoteamentoAvancado.md)04[Controllers e Services](docs/04-ControllersEServices.md)05[Banco de Dados e ORM](docs/05-BancoDeDados.md)06[Validações e DTOs](docs/06-ValidacoesEDtos.md)07[Mutations](docs/07-Mutations.md)08[Middlewares e Segurança](docs/08-MiddlewaresESeguranca.md)09[Upload de Arquivos](docs/09-UploadDeArquivos.md)10[Views e UI](docs/10-ViewsEUI.md)11[Injeção de Dependências](docs/11-InjecaoDeDependencias.md)12[CLI e Migrations](docs/12-CLIMigrations.md)13[Helpers Globais](docs/13-HelpersGlobais.md)14[Redis e Sessões](docs/14-RedisESessoes.md)15[Exceções e Debug](docs/15-ExcecoesEDebug.md)16[Nuvem e FrankenPHP](docs/16-NuvemEFrankenPHP.md)17[JWT e API](docs/17-JWT-E-API.md)18[E-mails](docs/18-Emails.md)19[Filas e Jobs](docs/19-Filas-E-Jobs.md)20[Cache](docs/20-Cache.md)21[Eventos em Tempo Real (Mercure)](docs/21-MercureRealTime.md)22[Tutorial CRUD Completo](docs/22-TutorialCRUD.md)23[Broadcasting Real-Time](docs/23-BroadcastingRealTime.md)---

Exemplos em Destaque
--------------------

[](#exemplos-em-destaque)

- **[Avisos em Tempo Real](docs/REALTIME_DEMO.md)** — Notificações instantâneas com HTMX e Mercure em menos de 5 minutos.

---

Requisitos
----------

[](#requisitos)

- PHP **8.1+** (recomendado 8.3+)
- Extensões: `pdo`, `pdo_mysql` (ou `pdo_pgsql` / `pdo_sqlite`), `mbstring`, `openssl`
- Composer 2.x

---

Licença
-------

[](#licença)

[MIT](LICENSE) — Feito com propósito educacional e uso em produção.

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance83

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

59

Last Release

85d ago

Major Versions

v1.0.2 → v2.0.02026-02-19

2.6.0 → 3.0.02026-02-27

3.5.1 → 4.0.02026-03-09

PHP version history (2 changes)v1.0.0PHP &gt;=8.0

4.3.1PHP &gt;=8.5.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/101806766?v=4)[Felipe Carvalho C. Oropeza](/maintainers/FelipeOropeza)[@FelipeOropeza](https://github.com/FelipeOropeza)

---

Top Contributors

[![FelipeOropeza](https://avatars.githubusercontent.com/u/101806766?v=4)](https://github.com/FelipeOropeza "FelipeOropeza (173 commits)")

---

Tags

phpframeworkroutermvcSkeleton

### Embed Badge

![Health badge](/badges/felipe-code-mvc-base/health.svg)

```
[![Health](https://phpackages.com/badges/felipe-code-mvc-base/health.svg)](https://phpackages.com/packages/felipe-code-mvc-base)
```

###  Alternatives

[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.7k38.9k](/packages/matomo-matomo)[concrete5/core

Concrete core subtree split

20166.1k52](/packages/concrete5-core)[quantum/framework

The Quantum PHP Framework

393.2k2](/packages/quantum-framework)[sproutcms/cms

Enterprise content management and framework

242.5k4](/packages/sproutcms-cms)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
