|  Download PHP MVC ApplicationEsta é 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 Projetophp-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
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).
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`.
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.
Padrão Dependency Injection:
- Classes como `UserValidator` são injetadas nos controladores, facilitando a substituição e os testes unitários.
Padrão Template Method:
- A `BaseController` fornece métodos genéricos (`extractAndValidateData`, `jsonResponse`) que podem ser reutilizados ou estendidos por controladores específicos.
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 RedirecionamentosMensagens FlashAs 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.']);
 RedirecionamentosA 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 UserValidatorA 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. Instalação
Clone o repositório:
git clone https://github.com/faustinopsy/php-mvc-app
Navegue até o diretório do projeto:
cd php-mvc-app
Instale as dependências usando o Composer:
composer install
Configure a conexão com o banco de dados no arquivo `config/database.php` e configure o banco SQLite.
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
 ContribuindoSinta-se à vontade para enviar issues ou pull requests para melhorias e correções de bugs. LicençaEste projeto é open-source e está disponível sob a licença MIT. |