PHP Classes

Learn from the PHP MVC Example Application PHP MVC App: MVC based application for the Web and as an API

Recommend this page to a friend!
  Info   Documentation   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2025-05-08 (9 days ago) RSS 2.0 feedNot yet rated by the usersTotal: Not yet counted Not yet ranked
Version License PHP version Categories
php-mvc-app 1.0.0MIT/X Consortium ...5Design Patterns, Applications
Description 

Author

This package implements an MVC based application for the Web and as an API.

It provides base classes to implement controller classes, request router, views, request redirection, and flashing data in sessions.

The package implements two controllers to provide access to perform operations with user records using a Web page or an API.

The user records are stored and retrieve using a model class that accesses a database using PDO.

In Portuguese:

Esta é uma aplicação (modelo) desenvolvida em PHP utilizando o padrão MVC (Model-View-Controller).

A aplicação implementa funcionalidades de CRUD (Criar, Ler, Atualizar, Excluir) para gerenciamento de usuários com a possibilidade de expandir com outros módulos.

Picture of Rodrigo Faustino
  Performance   Level  
Innovation award
Innovation award
Nominee: 24x

Winner: 4x

 

Instructions

For Portuguese language developers:

Leia este arquivo README para entender como desenvolver uma aplicação em PHP usando MVC com este componente.

Documentation

PHP MVC Application

Esta é uma aplicação simples desenvolvida em PHP utilizando o padrão MVC (Model-View-Controller). O objetivo principal é gerenciar dados de usuários com foco em princípios de programação orientada a objetos e boas práticas de design de software. A aplicação implementa funcionalidades de CRUD (Criar, Ler, Atualizar, Excluir) para gerenciamento de usuários com a possibilidade de expandir com outros módulos, utilizando SQLite como banco de dados. A aplicação agora utiliza uma classe Entidade (User) para representar os dados do usuário, melhorando o encapsulamento e a organização do código.

Estrutura do Projeto

php-mvc-app
??? app
?   ??? Controllers
?   ?   ??? UserController.php
?   ?   ??? ApiUserController.php
?   ??? Models
?   ?   ??? UserModel.php
?   ??? Entities
?   ?   ??? UserModel.php
?   ??? Views
?   ?   ??? templates
?   ?   ?   ??? partials
?   ?   ?   ?   ??? header.php
?   ?   ?   ?   ??? footer.php
?   ?   ?   ??? user
?   ?   ?   ?   ??? create.php
?   ?   ?   ?   ??? edit.php
?   ?   ?   ?   ??? index.php
?   ?   ?   ??? errors
?   ?   ?       ??? 404.php
?   ??? core
?       ??? BaseController.php
?       ??? Router.php
?       ??? View.php
?       ??? Flash.php
?       ??? Redirect.php
?   ??? Validators
?       ??? UserValidator.php
??? config
?   ??? database.php
??? public
?   ??? index.php
?   ??? routes.php
?   ??? assets
?       ??? css
?       ?   ??? style.css
?       ??? js
?       ?   ??? darkmode.js
?       ??? images
??? .env.example
??? composer.json
??? README.md

Funcionalidades

  • Gerenciamento de Usuários: Criar, ler, atualizar e excluir registros de usuários.
  • Suporte a API: Responder a requisições API com dados em formato JSON.
  • Sistema de Rotas: Gerenciamento de URLs com suporte a parâmetros dinâmicos.
  • Renderização de Views: Renderização dinâmica de templates com suporte a partials (cabeçalho e rodapé) e uma função helper (`$h`) para escaping de HTML.
  • Mensagens Flash: Notificações para ações realizadas pelo usuário.
  • Persistência de Formulários: Mantém os dados preenchidos em formulários (exceto senhas) após erros de validação, usando mensagens flash para "old input".
  • Modo Escuro: Alternância entre temas claro e escuro com persistência via `localStorage`.
  • Injeção de Dependências: Uso de classes auxiliares como `UserValidator` para validações específicas.
  • Uso de Entidades: A classe `UserModel` retorna objetos `User` em vez de arrays, promovendo melhor encapsulamento.

Padrões de Design Utilizados

  1. Princípios SOLID: - Responsabilidade Única (SRP): Cada classe tem uma única responsabilidade. Por exemplo, `UserValidator` é responsável apenas por validações de usuários. - Inversão de Dependência (DIP): Controladores dependem de abstrações (como `UserValidator`) em vez de implementações concretas. - (Outros princípios como OCP, LSP, ISP também são considerados no design geral).
  2. Composição sobre Herança: - A lógica genérica é centralizada na `BaseController`, enquanto funcionalidades específicas são delegadas a classes auxiliares como `UserValidator`.
  3. Padrão Strategy: - A validação de dados é encapsulada em uma classe separada (`UserValidator`), permitindo a reutilização e substituição de estratégias de validação.
  4. Padrão Dependency Injection: - Classes como `UserValidator` são injetadas nos controladores, facilitando a substituição e os testes unitários.
  5. Padrão Template Method: - A `BaseController` fornece métodos genéricos (`extractAndValidateData`, `jsonResponse`) que podem ser reutilizados ou estendidos por controladores específicos.
  6. Padrão Entity: - A classe `App\Entities\User` representa um registro de usuário, encapsulando seus dados e getters.

Como Funcionam as Mensagens Flash e Redirecionamentos

Mensagens Flash

As mensagens flash são usadas para exibir notificações temporárias ao usuário, como mensagens de sucesso ou erro. Elas são armazenadas na sessão e removidas automaticamente após serem exibidas. - Definir uma Mensagem Flash (Ex: Erro):

  use App\Core\Flash;

  // A chave da sessão é definida em .env (FLASH_MESSAGE_KEY)
  Flash::setMessage($_ENV['FLASH_MESSAGE_KEY'], ['error' => 'Senha inválida.']);

  • Exibir Mensagens Flash na View:
    <?php if ($flash = \App\Core\Flash::get($_ENV['FLASH_MESSAGE_KEY'])): ?>
        <?php foreach ($flash as $type => $message): ?>
        <div class="<?php echo $h($type); ?>"> <!-- Usa o helper $h para escapar a classe CSS -->
            <?php echo $h($message); ?> <!-- Usa o helper $h para escapar a mensagem -->
        </div>
        <?php endforeach; ?>
    <?php endif; ?>
    
    (Nota: A variável $h é uma função helper passada pelo Controller para aplicar htmlspecialchars)

Redirecionamentos

A classe Redirect é usada para redirecionar o usuário para outra página, com suporte a mensagens flash.

  • Redirecionar com Mensagem Flash e "Old Input" (após erro de validação):
    use App\Core\Redirect;
    
    // Passa a mensagem de erro e os dados do $_POST para repopular o formulário
    Redirect::with('/user/create', ['error' => 'Dados inválidos.'], $_POST);
    
  • Redirecionar com Mensagem Flash (após sucesso):
    use App\Core\Redirect;
    
    Redirect::with('/user/create', ['error' => 'Ocorreu um erro ao criar o usuário.']);
    
  • Redirecionar sem Mensagem Flash:
    Redirect::to('/user/index');
    

Validações com UserValidator

A classe UserValidator é responsável por validar os dados de entrada relacionados a usuários. Ela é injetada nos controladores para garantir que as validações sejam centralizadas e reutilizáveis.

  • Exemplo de Validação:
    use App\Validators\UserValidator;
    // $userModel é uma instância de UserModel
    $validator = new UserValidator($userModel);
    $errors = $validator->validate($data);
    
    if (!empty($errors)) {
        // Lidar com os erros
    }
    
  • Regras de Validação: - O nome deve ter entre 3 e 50 caracteres. - O e-mail deve ser válido e único. - A senha deve ter pelo menos 6 caracteres (obrigatória na criação, opcional na atualização, mas validada se fornecida).

Instalação

  1. Clone o repositório:
    git clone https://github.com/faustinopsy/php-mvc-app
    
  2. Navegue até o diretório do projeto:
    cd php-mvc-app
    
  3. Instale as dependências usando o Composer:
    composer install
    
  4. Configure a conexão com o banco de dados no arquivo `config/database.php` e configure o banco SQLite.
  5. Crie um arquivo `.env` na raiz do projeto com as variáveis de ambiente necessárias. Use o arquivo `.env.example` como referência.

Uso

  • Acesse o arquivo `public/index.php` no navegador para iniciar a aplicação.
  • Utilize as rotas fornecidas para gerenciar usuários e interagir com a aplicação.
  • Se o php estiver setado nas variáveis de ambiente basta iniciar o servidor embutido dentro da pasta do projeto:
php -S localhost:8080 -t public

Contribuindo

Sinta-se à vontade para enviar issues ou pull requests para melhorias e correções de bugs.

Licença

Este projeto é open-source e está disponível sob a licença MIT.


  Files folder image Files (26)  
File Role Description
Files folder imageapp (7 directories)
Files folder imagepublic (2 files, 1 directory)
Accessible without login Plain text file .env.example Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads  
 100%
Total:0
This week:0