{"id":31588658,"url":"https://github.com/angelluzk/crud-completo-php","last_synced_at":"2026-05-04T15:31:33.368Z","repository":{"id":313570038,"uuid":"1049446454","full_name":"angelluzk/crud-completo-php","owner":"angelluzk","description":"CRUD Completo em PHP com PostgreSQL, Tailwind e MVC","archived":false,"fork":false,"pushed_at":"2025-09-14T02:48:31.000Z","size":40,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-14T04:22:49.578Z","etag":null,"topics":["composer","crud","mvc","pdo","php","php8","postgresql","tailwind","tailwindcss"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angelluzk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-03T01:56:02.000Z","updated_at":"2025-09-14T02:48:34.000Z","dependencies_parsed_at":"2025-09-12T10:46:21.293Z","dependency_job_id":null,"html_url":"https://github.com/angelluzk/crud-completo-php","commit_stats":null,"previous_names":["angelluzk/crud-completo-php"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/angelluzk/crud-completo-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2Fcrud-completo-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2Fcrud-completo-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2Fcrud-completo-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2Fcrud-completo-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angelluzk","download_url":"https://codeload.github.com/angelluzk/crud-completo-php/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2Fcrud-completo-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278547821,"owners_count":26004775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composer","crud","mvc","pdo","php","php8","postgresql","tailwind","tailwindcss"],"created_at":"2025-10-06T02:12:05.026Z","updated_at":"2025-10-06T02:12:18.867Z","avatar_url":"https://github.com/angelluzk.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CRUD Completo em PHP com Arquitetura Profissional\n\n[![PHP](https://img.shields.io/badge/PHP-7.x%2F8.x-blue?logo=php\\\u0026logoColor=white)](https://www.php.net/)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-14-green?logo=postgresql\\\u0026logoColor=white)](https://www.postgresql.org/)\n[![Tailwind CSS](https://img.shields.io/badge/TailwindCSS-3.x-teal?logo=tailwindcss\\\u0026logoColor=white)](https://tailwindcss.com/)\n[![VSCode](https://img.shields.io/badge/VSCode-1.x-blueviolet?logo=visual-studio-code\\\u0026logoColor=white)](https://code.visualstudio.com/)\n[![DBeaver](https://img.shields.io/badge/DBeaver-25.2.0-orange?logo=dbeaver\\\u0026logoColor=white)](https://dbeaver.io/)\n\nUm 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.\n\nO 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.\n\n-----\n\n## ✨ Principais Características\n\n  * **Arquitetura MVC Real:** Separação clara de responsabilidades entre Modelos (Entidades), Visões (Templates PHP) e Controladores.\n  * **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.\n  * **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.\n  * **Roteamento Limpo:** URLs amigáveis e performáticas gerenciadas pela biblioteca `FastRoute`, com cache de rotas para produção.\n  * **Segurança:**\n      * **Proteção CSRF** em todos os formulários com tokens de uso único.\n      * Uso de **PDO com Prepared Statements** para prevenir SQL Injection.\n      * **Escaping de saídas** HTML para prevenir ataques XSS.\n  * **Configuração Centralizada:** Uso de variáveis de ambiente (`.env`) para gerenciar configurações sensíveis (banco de dados, ambiente da aplicação).\n  * **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\").\n  * **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`).\n\n-----\n\n## 🛠️ Tecnologias Utilizadas\n\n  * **Back-end:** PHP 8.1+\n  * **Banco de Dados:** PostgreSQL 12+\n  * **Front-end:** Tailwind CSS (via Play CDN para desenvolvimento)\n  * **Dependências (via Composer):**\n      * `vlucas/phpdotenv`: Para carregar variáveis de ambiente.\n      * `nikic/fast-route`: Para o sistema de roteamento.\n  * **Servidor:** Servidor embutido do PHP ou ambiente local como XAMPP/Docker com Apache/Nginx.\n\n-----\n\n## 📂 Estrutura do Projeto\n\n```\ncrud-completo-php/\n│\n├── app/\n│   ├── Config/\n│   │   └── Database.php         # Conexão com o banco (Singleton)\n│   ├── Controllers/\n│   │   └── UsuarioController.php  # Orquestra as requisições\n│   ├── Core/\n│   │   ├── Csrf.php             # Gerencia tokens CSRF\n│   │   ├── Logger.php           # Grava logs de erro\n│   │   ├── Router.php           # Wrapper para o FastRoute\n│   │   ├── Validator.php        # Valida os dados de entrada\n│   │   └── View.php             # Renderiza as views com layouts\n│   ├── Models/\n│   │   └── Usuario.php          # Entidade de dados do usuário\n│   ├── Repositories/\n│   │   └── UsuarioRepository.php  # Lógica de persistência de dados\n│   └── helpers.php              # Funções auxiliares globais (url(), redirect())\n│\n├── public/\n│   ├── .htaccess                # Regras de reescrita para o Apache\n│   └── index.php                # Ponto de Entrada (Front Controller)\n│\n├── storage/\n│   ├── cache/                   # Cache de rotas (gerado)\n│   │   └── .gitkeep\n│   └── logs/                    # Logs da aplicação (gerado)\n│       └── .gitkeep\n│\n├── views/\n│   ├── erros/                   # Views para páginas de erro (404, 500)\n│   ├── layout/\n│   │   └── app.php              # Layout principal da aplicação\n│   └── usuario/                 # Views específicas do CRUD de usuário\n│\n├── .env                         # Suas variáveis de ambiente locais (NÃO VERSIONAR)\n├── .env.example                 # Arquivo de exemplo para configuração\n├── .gitignore                   # Arquivos e pastas a serem ignorados pelo Git\n├── composer.json                # Definição do projeto e dependências\n├── composer.lock                # Trava as versões exatas das dependências\n└── README.md\n```\n\n-----\n\n## 🚀 Como Executar o Projeto (Guia Detalhado)\n\nSiga estes passos para configurar e rodar o ambiente de desenvolvimento localmente.\n\n### 1\\. Pré-requisitos\n\n  * **PHP 8.1** ou superior\n  * **Composer** instalado\n  * **PostgreSQL** instalado e rodando\n\n### 2\\. Clone o Repositório\n\n```bash\ngit clone https://github.com/seu-usuario/crud-completo-php.git\ncd crud-completo-php\n```\n\n### 3\\. Instale as Dependências\n\nO Composer irá baixar todas as bibliotecas necessárias.\n\n```bash\ncomposer install\n```\n\n### 4\\. Crie o Banco de Dados e a Tabela\n\nConecte-se ao seu PostgreSQL (usando DBeaver, pgAdmin, ou `psql`) e execute os seguintes comandos SQL:\n\n```sql\nCREATE DATABASE crud_completo;\n```\n\n```sql\n-- Conecte-se ao banco crud_completo antes de rodar este comando\nCREATE TABLE usuarios (\n    id SERIAL PRIMARY KEY,\n    nome VARCHAR(100) NOT NULL,\n    email VARCHAR(100) UNIQUE NOT NULL,\n    criado_em TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,\n    atualizado_em TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP\n);\n```\n\n### 5\\. Configure as Variáveis de Ambiente\n\n1.  Copie o arquivo de exemplo `.env.example` para um novo arquivo chamado `.env`.\n\n    ```bash\n    cp .env.example .env\n    ```\n\n2.  Abra o arquivo `.env` e preencha com suas configurações locais. **Preste atenção especial à `APP_URL`**.\n\n    ```dotenv\n    # Application Environment\n    APP_ENV=development\n    APP_URL=http://localhost:8080/crud-completo-php/public # Se usar o servidor embutido do PHP\n    # APP_URL=http://crud.test # Se usar um Virtual Host (Opção B abaixo)\n\n    # Database Connection\n    DB_HOST=localhost\n    DB_PORT=5432\n    DB_DATABASE=crud_completo\n    DB_USERNAME=postgres\n    DB_PASSWORD=sua_senha_secreta\n    ```\n\n### 6\\. Crie as Pastas de Armazenamento\n\nO sistema de log e cache precisa de pastas com permissão de escrita.\n\n```bash\nmkdir -p storage/logs storage/cache\n```\n\n*(Em ambientes Linux/Mac, talvez seja necessário dar permissão de escrita para o servidor web: `sudo chmod -R 775 storage`)*\n\n### 7\\. Execute a Aplicação\n\nVocê tem duas opções principais:\n\n#### Opção A (Mais Simples): Usando o Servidor Embutido do PHP\n\nEste comando inicia um servidor web diretamente na pasta `public`, que é a forma correta.\n\n```bash\nphp -S localhost:8080 -t public\n```\n\nAgora, acesse no navegador: **`http://localhost:8080`**\n\n#### Opção B (Mais Profissional): Usando um Ambiente como o XAMPP/WAMP com Virtual Host\n\nConfigurar 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.\n\n1.  **Edite o arquivo `hosts` do seu sistema** para mapear um domínio local para o seu computador.\n\n      * (Windows: `C:\\Windows\\System32\\drivers\\etc\\hosts`)\n      * (Linux/Mac: `/etc/hosts`)\n      * Adicione a linha: `127.0.0.1 crud.test`\n\n2.  **Edite o arquivo de configuração de Virtual Hosts do Apache** (ex: `C:\\xampp\\apache\\conf\\extra\\httpd-vhosts.conf`). Adicione o seguinte bloco:\n\n    ```apache\n    \u003cVirtualHost *:80\u003e\n        DocumentRoot \"C:/caminho/completo/para/seu/projeto/crud-completo-php/public\"\n        ServerName crud.test\n        \u003cDirectory \"C:/caminho/completo/para/seu/projeto/crud-completo-php/public\"\u003e\n            AllowOverride All\n            Require all granted\n        \u003c/Directory\u003e\n    \u003c/VirtualHost\u003e\n    ```\n\n    *(Ajuste o `DocumentRoot` para o caminho real da sua pasta `public`)*\n\n3.  **Reinicie o Apache.**\n\n4.  Ajuste a `APP_URL` no seu `.env` para `http://crud.test`.\n\n5.  Acesse no navegador: **`http://crud.test`**\n\n-----\n\n## 🤝 Contribuição\n\nContribuiçõ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.\n\n### ✍️ Autor\n\n\u003cimg src=\"https://github.com/angelluzk.png\" width=\"100px;\" alt=\"Foto de Angel Luz\"/\u003e\n\n\u003e Desenvolvido com 💛 por **Angel Luz**.\n\nSe quiser conversar, colaborar ou oferecer uma oportunidade:\n\n📬 E-mail: [contatoangelluz@gmail.com](mailto:contatoangelluz@gmail.com)  \n🐙 GitHub: [@angelluzk](https://github.com/angelluzk)  \n💼 LinkedIn: [linkedin.com/in/angelitaluz](https://www.linkedin.com/in/angelitaluz/)  \n🗂️Website / Portfólio: [meu_portfolio/](https://angelluzk.github.io/meu_portfolio/) ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelluzk%2Fcrud-completo-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangelluzk%2Fcrud-completo-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelluzk%2Fcrud-completo-php/lists"}