Skip to content

mervy/other-mvc-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Meu Framework PHP MVC (sem nome ainda)

Um micro-framework PHP moderno, feito do zero, sem dependências externas — estilo Laravel/Symfony, mas minimalista e educativo.


✅ O que fizemos?

Construímos um sistema MVC completo em PHP puro, com:

  • ✅ Roteamento amigável (/user/{name}/{id})
  • ✅ Controllers com injeção de dependência
  • ✅ Sistema de Views estilo Plates (sem usar a biblioteca)
  • ✅ Layouts, partials e helper insert()
  • ✅ Helper global request() para acessar parâmetros de rota, GET e POST
  • ✅ Suporte a caracteres UTF-8 em URLs (ex: João, María)
  • ✅ Integração com Bootstrap 5 e Bootstrap Icons
  • ✅ Autoload PSR-4 via Composer
  • ✅ Estrutura organizada e escalável

📁 Estrutura do Projeto

no-name-yet/
├── composer.json
├── public/
│   ├── assets/
│   │   └── css/
│   │       └── styles.css
│   └── index.php          ← Ponto de entrada (front controller)
├── src/
│   ├── app/
│   │   ├── Controllers/
│   │   │   └── HomeController.php
│   │   └── Views/
│   │       ├── pages/
│   │       │   ├── home.php
│   │       │   ├── about.php
│   │       │   └── user-profile.php
│   │       ├── partials/
│   │       │   ├── header.php
│   │       │   └── footer.php
│   │       └── templates/
│   │           └── layout.php
│   └── core/
│       ├── Router.php
│       ├── View.php
│       ├── BaseController.php
│       ├── Request.php
│       └── helpers.php    ← insert(), request()
└── vendor/                ← Gerado pelo Composer

🛠️ Como usar

1. Instale as dependências

composer install

2. Inicie o servidor embutido do PHP

php -S localhost:8000 -t public

Acesse: 👉 http://localhost:8000


🧭 Rotas Disponíveis (exemplos)

// Em public/index.php

$router->get('/', HomeController::class, 'index');
$router->get('/about', HomeController::class, 'about');
$router->get('/user/{name}/{id}/{avatar}', HomeController::class, 'showUser');
$router->post('/contact', HomeController::class, 'contact');

Teste no navegador:

  • http://localhost:8000/
  • http://localhost:8000/about
  • http://localhost:8000/user/João/123/star-fill?page=2&theme=dark

💡 Como criar uma nova rota

  1. Adicione no public/index.php:
$router->get('/produto/{id}', ProdutoController::class, 'detalhe');
  1. Crie o controller:
<?php

namespace My\App\Controllers;

use My\Core\BaseController;

class ProdutoController extends BaseController
{
    public function detalhe()
    {
        $id = request()->params()->id;
        $categoria = request()->get()->categoria ?? 'todos';

        $this->display('pages.produto', [
            'title' => "Produto #{$id}",
            'id' => $id,
            'categoria' => $categoria,
        ]);
    }
}
  1. Crie a view em src/app/Views/pages/produto.php:
<h1>Produto ID: <?= $id ?></h1>
<p>Categoria: <?= $categoria ?></p>
<?php insert('footer'); ?>

🖼️ Sistema de Views

Renderizar view com layout:

$this->display('pages.home', [
    'title' => 'Página Inicial',
    'message' => 'Bem-vindo!'
]);

Incluir partials (trechos reutilizáveis):

<?php insert('header'); ?>
<?php insert('sidebar', ['items' => $menu]); ?>

Os partials ficam em src/app/Views/partials/

Layout padrão:

O layout (templates/layout.php) envolve todas as páginas e injeta $content.


📥 Acessando Requisições HTTP

Use o helper global request() para acessar:

Parâmetros da rota (ex: /user/{name})

$name = request()->params()->name;

Query string (GET)

$page = request()->get()->page; // ?page=2

Dados de formulário (POST)

$email = request()->post()->email;

✅ Tudo decodificado automaticamente (UTF-8, ex: João, María)


🎨 Estilização (Bootstrap + Ícones)

O layout padrão já inclui:

  • Bootstrap 5 CSS/JS
  • Bootstrap Icons
  • Fonte personalizada (Poppins)

Basta usar classes do Bootstrap e ícones como:

<i class="bi bi-star-fill"></i>
<button class="btn btn-primary">Clique aqui</button>

📄 Licença

MIT — faça o que quiser com esse código. Ideal para aprendizado, protótipos ou projetos pessoais.


🙌 Autor

Rogério Soares
📧 rgrsoares@yahoo.com.br
🔗 Inspirado por Laravel, Symfony, e muitas xícaras de café.


🚧 Próximos passos (sugestões)

  • Adicionar sistema de banco de dados (PDO/MySQL)
  • Criar middleware de autenticação
  • Implementar sistema de sessão e flash messages
  • Adicionar suporte a upload de arquivos
  • Criar helper url(), asset(), csrf_field()
  • Sistema de cache de views
  • CLI para gerar controllers/views automaticamente

💬 Como contribuir

  1. Faça um fork
  2. Crie uma branch (git checkout -b feature/nova-funcionalidade)
  3. Commit suas mudanças (git commit -am 'Adiciona nova funcionalidade')
  4. Push para a branch (git push origin feature/nova-funcionalidade)
  5. Abra um Pull Request

PRONTO! Seu projeto agora tem uma documentação clara, profissional e útil — perfeita para você continuar evoluindo ou até compartilhar com outros desenvolvedores.

Se quiser, posso te ajudar a:

  • Gerar um .gitignore
  • Criar um script de instalação
  • Dockerizar o projeto
  • Publicar no GitHub com CI/CD

É só pedir! 🚀

Boa sorte, e parabéns pelo excelente trabalho até aqui! 💪👨‍💻

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published