https://github.com/angelluzk/crud-completo-php
CRUD Completo em PHP com PostgreSQL, Tailwind e MVC
https://github.com/angelluzk/crud-completo-php
composer crud mvc pdo php php8 postgresql tailwind tailwindcss
Last synced: about 2 months ago
JSON representation
CRUD Completo em PHP com PostgreSQL, Tailwind e MVC
- Host: GitHub
- URL: https://github.com/angelluzk/crud-completo-php
- Owner: angelluzk
- Created: 2025-09-03T01:56:02.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-09-14T02:48:31.000Z (9 months ago)
- Last Synced: 2025-09-14T04:22:49.578Z (9 months ago)
- Topics: composer, crud, mvc, pdo, php, php8, postgresql, tailwind, tailwindcss
- Language: PHP
- Homepage:
- Size: 39.1 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# CRUD Completo em PHP com Arquitetura Profissional
[](https://www.php.net/)
[](https://www.postgresql.org/)
[](https://tailwindcss.com/)
[](https://code.visualstudio.com/)
[](https://dbeaver.io/)
Um projeto de **CRUD (Create, Read, Update, Delete)** de usuários, desenvolvido em PHP puro com uma arquitetura moderna e escalável. Utiliza o padrão **MVC**, Injeção de Dependência, Repositórios e um roteador performático para criar uma base sólida para aplicações web robustas e de fácil manutenção.
O projeto foi construído do zero com foco em boas práticas, segurança e organização, resultando em um código limpo, coeso e desacoplado.
-----
## ✨ Principais Características
* **Arquitetura MVC Real:** Separação clara de responsabilidades entre Modelos (Entidades), Visões (Templates PHP) e Controladores.
* **Injeção de Dependência:** Um contêiner de DI simples gerencia a criação de objetos e suas dependências, tornando o sistema flexível e testável.
* **Padrão Repositório:** A lógica de acesso ao banco de dados é abstraída, permitindo que a aplicação trabalhe com objetos e não diretamente com queries SQL.
* **Roteamento Limpo:** URLs amigáveis e performáticas gerenciadas pela biblioteca `FastRoute`, com cache de rotas para produção.
* **Segurança:**
* **Proteção CSRF** em todos os formulários com tokens de uso único.
* Uso de **PDO com Prepared Statements** para prevenir SQL Injection.
* **Escaping de saídas** HTML para prevenir ataques XSS.
* **Configuração Centralizada:** Uso de variáveis de ambiente (`.env`) para gerenciar configurações sensíveis (banco de dados, ambiente da aplicação).
* **Sistema de Views com Layouts:** Evita repetição de código HTML com um sistema de layout principal ("moldura") e views de conteúdo ("fotos").
* **Estrutura de Projeto Profissional:** Organização de pastas e arquivos que separa o código-fonte (`app`), os arquivos públicos (`public`) e os arquivos gerados (`storage`).
-----
## 🛠️ Tecnologias Utilizadas
* **Back-end:** PHP 8.1+
* **Banco de Dados:** PostgreSQL 12+
* **Front-end:** Tailwind CSS (via Play CDN para desenvolvimento)
* **Dependências (via Composer):**
* `vlucas/phpdotenv`: Para carregar variáveis de ambiente.
* `nikic/fast-route`: Para o sistema de roteamento.
* **Servidor:** Servidor embutido do PHP ou ambiente local como XAMPP/Docker com Apache/Nginx.
-----
## 📂 Estrutura do Projeto
```
crud-completo-php/
│
├── app/
│ ├── Config/
│ │ └── Database.php # Conexão com o banco (Singleton)
│ ├── Controllers/
│ │ └── UsuarioController.php # Orquestra as requisições
│ ├── Core/
│ │ ├── Csrf.php # Gerencia tokens CSRF
│ │ ├── Logger.php # Grava logs de erro
│ │ ├── Router.php # Wrapper para o FastRoute
│ │ ├── Validator.php # Valida os dados de entrada
│ │ └── View.php # Renderiza as views com layouts
│ ├── Models/
│ │ └── Usuario.php # Entidade de dados do usuário
│ ├── Repositories/
│ │ └── UsuarioRepository.php # Lógica de persistência de dados
│ └── helpers.php # Funções auxiliares globais (url(), redirect())
│
├── public/
│ ├── .htaccess # Regras de reescrita para o Apache
│ └── index.php # Ponto de Entrada (Front Controller)
│
├── storage/
│ ├── cache/ # Cache de rotas (gerado)
│ │ └── .gitkeep
│ └── logs/ # Logs da aplicação (gerado)
│ └── .gitkeep
│
├── views/
│ ├── erros/ # Views para páginas de erro (404, 500)
│ ├── layout/
│ │ └── app.php # Layout principal da aplicação
│ └── usuario/ # Views específicas do CRUD de usuário
│
├── .env # Suas variáveis de ambiente locais (NÃO VERSIONAR)
├── .env.example # Arquivo de exemplo para configuração
├── .gitignore # Arquivos e pastas a serem ignorados pelo Git
├── composer.json # Definição do projeto e dependências
├── composer.lock # Trava as versões exatas das dependências
└── README.md
```
-----
## 🚀 Como Executar o Projeto (Guia Detalhado)
Siga estes passos para configurar e rodar o ambiente de desenvolvimento localmente.
### 1\. Pré-requisitos
* **PHP 8.1** ou superior
* **Composer** instalado
* **PostgreSQL** instalado e rodando
### 2\. Clone o Repositório
```bash
git clone https://github.com/seu-usuario/crud-completo-php.git
cd crud-completo-php
```
### 3\. Instale as Dependências
O Composer irá baixar todas as bibliotecas necessárias.
```bash
composer install
```
### 4\. Crie o Banco de Dados e a Tabela
Conecte-se ao seu PostgreSQL (usando DBeaver, pgAdmin, ou `psql`) e execute os seguintes comandos SQL:
```sql
CREATE DATABASE crud_completo;
```
```sql
-- Conecte-se ao banco crud_completo antes de rodar este comando
CREATE TABLE usuarios (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
criado_em TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
atualizado_em TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
```
### 5\. Configure as Variáveis de Ambiente
1. Copie o arquivo de exemplo `.env.example` para um novo arquivo chamado `.env`.
```bash
cp .env.example .env
```
2. Abra o arquivo `.env` e preencha com suas configurações locais. **Preste atenção especial à `APP_URL`**.
```dotenv
# Application Environment
APP_ENV=development
APP_URL=http://localhost:8080/crud-completo-php/public # Se usar o servidor embutido do PHP
# APP_URL=http://crud.test # Se usar um Virtual Host (Opção B abaixo)
# Database Connection
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=crud_completo
DB_USERNAME=postgres
DB_PASSWORD=sua_senha_secreta
```
### 6\. Crie as Pastas de Armazenamento
O sistema de log e cache precisa de pastas com permissão de escrita.
```bash
mkdir -p storage/logs storage/cache
```
*(Em ambientes Linux/Mac, talvez seja necessário dar permissão de escrita para o servidor web: `sudo chmod -R 775 storage`)*
### 7\. Execute a Aplicação
Você tem duas opções principais:
#### Opção A (Mais Simples): Usando o Servidor Embutido do PHP
Este comando inicia um servidor web diretamente na pasta `public`, que é a forma correta.
```bash
php -S localhost:8080 -t public
```
Agora, acesse no navegador: **`http://localhost:8080`**
#### Opção B (Mais Profissional): Usando um Ambiente como o XAMPP/WAMP com Virtual Host
Configurar um Virtual Host permite que você acesse seu projeto por uma URL amigável (como `http://crud.test`) e é a forma como ambientes de produção funcionam.
1. **Edite o arquivo `hosts` do seu sistema** para mapear um domínio local para o seu computador.
* (Windows: `C:\Windows\System32\drivers\etc\hosts`)
* (Linux/Mac: `/etc/hosts`)
* Adicione a linha: `127.0.0.1 crud.test`
2. **Edite o arquivo de configuração de Virtual Hosts do Apache** (ex: `C:\xampp\apache\conf\extra\httpd-vhosts.conf`). Adicione o seguinte bloco:
```apache
DocumentRoot "C:/caminho/completo/para/seu/projeto/crud-completo-php/public"
ServerName crud.test
AllowOverride All
Require all granted
```
*(Ajuste o `DocumentRoot` para o caminho real da sua pasta `public`)*
3. **Reinicie o Apache.**
4. Ajuste a `APP_URL` no seu `.env` para `http://crud.test`.
5. Acesse no navegador: **`http://crud.test`**
-----
## 🤝 Contribuição
Contribuições são muito bem-vindas\! Sinta-se à vontade para abrir uma **issue** para relatar um bug ou sugerir uma melhoria, ou enviar um **pull request** com suas alterações.
### ✍️ Autor

> Desenvolvido com 💛 por **Angel Luz**.
Se quiser conversar, colaborar ou oferecer uma oportunidade:
📬 E-mail: [contatoangelluz@gmail.com](mailto:contatoangelluz@gmail.com)
🐙 GitHub: [@angelluzk](https://github.com/angelluzk)
💼 LinkedIn: [linkedin.com/in/angelitaluz](https://www.linkedin.com/in/angelitaluz/)
🗂️Website / Portfólio: [meu_portfolio/](https://angelluzk.github.io/meu_portfolio/)