PHP MVCDOCUMENTAÇÃO
v2.0.0

Introdução

Conheça os limites, a arquitetura e os recursos realmente presentes no projeto.

Sobre esta base. O repositório se identifica como PHP MVC Framework: uma base MVC reutilizável em PHP, não uma implementação integral de outro framework. Esta documentação descreve a versão 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.

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
ParteResponsabilidadeOnde começar
FrameworkInfraestrutura HTTP, banco e suporteEstrutura
AppControllers, requests, services, repositories e regras do exemploServices
RoutesVínculo explícito entre verbo/caminho e actionRoteamento
ViewsTemplates PHP de saída HTMLViews

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.

A API não registra criação/edição/exclusão de usuários, e pagamentos usam apenas um Null Object. Consulte endpoints REST ativos e o estado das integrações antes de planejar uma funcionalidade.

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.