Implementando MVC com Composer em PHP: Estrutura Completa com Arquivo de Rotas

Postado Por:

Categoria:

Postado em:

Implementando MVC com Composer em PHP: Estrutura Completa com Arquivo de Rotas

O padrão MVC (Model-View-Controller) é amplamente utilizado no desenvolvimento de aplicações web para separar as responsabilidades do código. Ele ajuda a manter a lógica da aplicação, a interface de usuário e a manipulação de dados independentes umas das outras. Junto com o Composer, uma ferramenta de gerenciamento de dependências para PHP, você pode criar um projeto bem estruturado, modular e fácil de manter.

Neste artigo, vamos aprender a implementar o padrão MVC em PHP, utilizando o Composer para autoload e gestão de pacotes, além de organizar as rotas em um arquivo separado.

Configuração Inicial do Projeto

Passo 1: Instalando o Composer

Se ainda não tem o Composer instalado, você pode instalá-lo seguindo as instruções neste post Iniciando um Projeto PHP com Composer: Um Guia Prático.

Passo 2: Criando o Projeto

Crie um novo diretório para o seu projeto e navegue até ele pelo terminal:

.porto-u-7446.porto-u-heading{text-align:left}
mkdir meu_projeto_mvc
cd meu_projeto_mvc
Passo 3: Inicializando o Composer

Inicie um novo projeto com o Composer:

.porto-u-5389.porto-u-heading{text-align:left}
composer init

Siga as instruções para configurar seu composer.json, abaixo temos um exemplo de como deve ficar:

.porto-u-9378.porto-u-heading{text-align:left}
{
    "name": "aluno/www",
    "description": "Descrição Teste",
    "type": "project",
    "autoload": {
        "psr-4": {
            "App\\": "App/"
        }
    },
    "authors": [
        {
            "name": "Gustavo Messias",
            "email": "gustavo@messias.io"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}
Passo 4: Instalando o FastRoute

Vamos usar o FastRoute para gerenciar as rotas da nossa aplicação. Instale-o via Composer:

.porto-u-8240.porto-u-heading{text-align:left}
composer require nikic/fast-route

Estrutura de Pastas do Projeto

A estrutura básica de um projeto MVC pode ser organizada da seguinte maneira:

.porto-u-4193.porto-u-heading{text-align:left}
meu_projeto_mvc/
│
├── App/
│   ├── Controllers/
│   │   └── HomeController.php
│   ├── Models/
│   ├── Views/
│   │   └── home.php
├── config/
│   └── routes.php
├── public/
│   └── index.php
├── vendor/
├── composer.json
  • app/Controllers/: Contém os controladores da aplicação.
  • app/Models/: Contém as classes que representam os dados e a lógica de negócio.
  • app/Views/: Contém as views, que são as partes visíveis da aplicação.
  • config/: Contém o arquivo de rotas da aplicação.
  • public/: Contém o arquivo index.php que serve como ponto de entrada para a aplicação.
  • vendor/: Contém as dependências instaladas pelo Composer.

Implementando o MVC com Arquivo de Rotas

Passo 1: Criando o Controlador

No diretório app/Controllers, crie um arquivo chamado HomeController.php:

.porto-u-5346.porto-u-heading{text-align:left}
<?php

namespace App\Controllers;

class HomeController {
    public function index() {
        return require_once __DIR__ . '/../Views/home.php';
    }
}
  • Passo 2: Criando a View

    No diretório app/Views, crie um arquivo chamado home.php:

.porto-u-1472.porto-u-heading{text-align:left}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Página Inicial</title>
</head>
<body>
    <h1>Bem-vindo ao Meu Projeto MVC!</h1>
</body>
</html>
  • Passo 3: Criando o Arquivo de Rotas

    No diretório config, crie um arquivo chamado routes.php:

.porto-u-3773.porto-u-heading{text-align:left}
<?php

use App\Controllers\HomeController;
use FastRoute\RouteCollector;

return function(RouteCollector $r) {
    $r->addRoute('GET', '/', [HomeController::class, 'index']);
    // Adicione mais rotas aqui
};
  • Explicação:
    • Aqui estamos retornando uma função que recebe um objeto RouteCollector e define as rotas usando o método addRoute.
    Passo 4: Configurando o Ponto de Entrada

    No diretório public, crie o arquivo index.php:

.porto-u-1041.porto-u-heading{text-align:left}
<?php

require_once __DIR__ . '/../vendor/autoload.php';

$dispatcher = FastRoute\simpleDispatcher(require __DIR__ . '/../config/routes.php');

$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];

$uri = rawurldecode(parse_url($uri, PHP_URL_PATH));

$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
    case FastRoute\Dispatcher::NOT_FOUND:
        echo '404 - Página não encontrada';
        break;
    case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
        echo '405 - Método não permitido';
        break;
    case FastRoute\Dispatcher::FOUND:
        $handler = $routeInfo[1];
        $vars = $routeInfo[2];
        [$controller, $method] = $handler;
        echo (new $controller)->$method($vars);
        break;
}
  • Explicação:
    • A linha require __DIR__ . '/../config/routes.php' carrega as rotas definidas no arquivo de rotas, separando a lógica de definição de rotas do arquivo principal index.php.
    Passo 5: Testando o Projeto

    Com o servidor PHP embutido, você pode testar o projeto executando:

.porto-u-9255.porto-u-heading{text-align:left}
php -S localhost:8000 -t public
  • Acesse http://localhost:8000 no seu navegador, e você deverá ver a mensagem "Bem-vindo ao Meu Projeto MVC!".

    Conclusão

    Agora, o projeto está devidamente estruturado com um arquivo de rotas separado, o que melhora a organização e a manutenção do código. Esse arquivo permite que todas as rotas da aplicação sejam centralizadas em um único local, facilitando a leitura e a adição de novas rotas no futuro.

    Essa abordagem modular vai ajudar bastante na escalabilidade do projeto e na clareza do código. Para mais informações sobre rotas e o padrão MVC em PHP, consulte a documentação oficial do PHP sobre Autoload e a documentação do Composer.

.porto-u-2913.porto-u-heading{text-align:left}

Deixe seu comentário

Posts RELACIONADOS