Introdução
Conheça os limites, a arquitetura e os recursos realmente presentes no projeto.
2.0.0 indicada no CHANGELOG.Visão geral
A aplicação separa entrada HTTP, rotas, controllers, serviços, repositórios, models e views. O framework está em framework/; a aplicação de exemplo, em app/; as rotas são declaradas em routes/; o ponto de entrada web é public/index.php.
O que está incluído
- Router HTTP com grupos, nomes, parâmetros opcionais e middleware.
- Request e Controller base; renderização de views PHP e layouts.
- Model/query builder com PDO, migrations PHP e seeders.
- Validador, FormRequest, sessão, autenticação web e tokens Bearer da API de exemplo.
- Services, Repositories, upload, logger, helpers e CLI gerador.
- ApiClient cURL para chamadas de saída e integração demonstrativa ViaCEP.
Limites importantes
A configuração de banco incluída é MySQL. O arquivo de configuração explica que SQLite não é suportado pelo Database atual. A API de exemplo expõe login/logout/me e leitura de usuários; não há rotas CRUD de criação/edição/exclusão de usuários registradas. A camada de pagamentos contém contrato e gateway nulo: não há integração de pagamento pronta.
Primeiro exemplo
Uma rota aponta para um método público de controller. As rotas Web são definidas em routes/web.php:
$router->get('/saudacao/{nome}', [SaudacaoController::class, 'show']);
class SaudacaoController extends Controller
{
public function show(string $nome): void
{
$this->view('saudacao', ['nome' => $nome]);
}
}Confirme a convenção de [rotas]( Roteamento ) e [controllers]( Controllers ) antes de usar o trecho em sua aplicação.
Navegue por recurso
Use a busca para encontrar classes, métodos, regras de validação e comandos. A [referência de API]( Referência de classes e funções ) reúne as assinaturas públicas/protegidas lidas do código entregue.
Como as camadas colaboram
A separação é uma convenção de responsabilidade, não um container de injeção automática. O Router resolve o destino HTTP; o Controller faz a orquestração e escolhe a saída. Regras reutilizáveis podem ser extraídas para Services, o acesso a dados pode ser organizado por Repositories, e o Model executa consultas sobre MySQL/PDO.
public/index.php
→ bootstrap/app.php
→ Framework\Core\Application::run()
→ Request + Router
→ middleware → action do Controller
→ Service / Repository / Model
→ View HTML ou envelope JSON
→ resposta HTTP| Parte | Responsabilidade | Onde começar |
|---|---|---|
| Framework | Infraestrutura HTTP, banco e suporte | Estrutura |
| App | Controllers, requests, services, repositories e regras do exemplo | Services |
| Routes | Vínculo explícito entre verbo/caminho e action | Roteamento |
| Views | Templates PHP de saída HTML | Views |
O que esta base oferece — e o que fica a cargo da aplicação
Os diretórios de framework oferecem primitives utilizáveis (Router, Controller, Model, Validator, Session, Upload e ApiClient). Alguns recursos descritos nos guias, como UserRepository e AuthService, pertencem à aplicação de exemplo e podem ser adaptados; não são serviços universais registrados por um container.
Exemplo copiável: controller, rota e view
Cenário: criar uma página /saudacao/Ana que mostre uma saudação. O controller deve estar no namespace Web esperado pelo autoloader, a action deve ser pública e a view precisa existir em resources/views.
1. Controller: app/Http/Controllers/Web/SaudacaoController.php
<?php
namespace App\Http\Controllers\Web;
use Framework\Http\Controller;
final class SaudacaoController extends Controller
{
public function show(string $nome): void
{
$this->view('saudacao', ['nome' => $nome], false);
}
}2. Rota: routes/web.php
<?php
use App\Http\Controllers\Web\SaudacaoController;
$router->get('/saudacao/{nome}', [SaudacaoController::class, 'show']);3. View: resources/views/saudacao.php
<h1>Olá, <?= e($nome) ?>!</h1>Como funciona e resultado esperado: o Router extrai nome do placeholder da URL e o entrega como argumento à action; view() inclui a view com os dados. A opção false desliga o layout para manter este exemplo mínimo. Abrindo /saudacao/Ana em um servidor que encaminhe rotas amigáveis ao front controller, o navegador mostra “Olá, Ana!”. O helper e() escapa o valor para saída HTML.
Observação: o comando php mvc serve atual não fornece um router script para encaminhar URLs que não correspondem a arquivos; veja o aviso na instalação.