Medeiros Corporation Inc.

Artigo

Tutorial de Implementação do MVC (Model-View-Controller)

Tutorial de Implementação do MVC (Model-View-Controller)

Fabrício de Medeiros

Introdução ao MVC

O padrão Model-View-Controller (MVC) é amplamente utilizado para organizar o código em aplicações web e desktop, separando as responsabilidades em três componentes principais: Model, View e Controller. Isso facilita a manutenção, a escalabilidade e o desenvolvimento colaborativo. Vamos explorar um exemplo prático de implementação de MVC em uma aplicação simples, como um sistema de gerenciamento de tarefas.


Estrutura do Projeto

Primeiro, organize seu projeto em diretórios correspondentes ao padrão MVC:

App
├── public
│   ├── index.php
├── src
│   ├── Model
│   │   └── Task.php
│   ├── View
│   │   ├── TaskView.php
│   ├── Controller
│   │   └── TaskController.php
│   ├── services
│   │   └── Service.php
│   └── config
│       └── database.php
├── vendor
│   ├── composer
│   │   └── (arquivos e pastas relacionados ao Composer)
│   └── autoload.php
├── composer.json
└── README.md
  • Controller: Contém a lógica de controle, processando as requisições e interagindo com os modelos.
  • Model: Representa os dados e as regras de negócios.
  • View: Responsável por renderizar a interface do usuário.

  • 1. Configuração do Banco de Dados

    No arquivo config/database.php, configure a conexão com o Banco de Dados:

    <?php
    class Database {
        private $host = "localhost";
        private $db_name = "task_manager";
        private $username = "root";
        private $password = "";
        public $conn;
    
        public function getConnection() {
            $this->conn = null;
    
            try {
                $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
                $this->conn->exec("set names utf8");
            } catch (PDOException $exception) {
                echo "Connection error: " . $exception->getMessage();
            }
    
            return $this->conn;
        }
    }
    

    2. Model

    No arquivo Model/Task.php, crie a classe do modelo para gerenciar as tarefas:

    <?php
    class Task {
        private $conn;
        private $table_name = "tasks";
    
        public $id;
        public $title;
        public $description;
        public $created_at;
    
        public function __construct($db) {
            $this->conn = $db;
        }
    
        public function create() {
            $query = "INSERT INTO " . $this->table_name . " SET title=:title, description=:description, created_at=:created_at";
    
            $stmt = $this->conn->prepare($query);
    
            $this->title = htmlspecialchars(strip_tags($this->title));
            $this->description = htmlspecialchars(strip_tags($this->description));
            $this->created_at = htmlspecialchars(strip_tags($this->created_at));
    
            $stmt->bindParam(":title", $this->title);
            $stmt->bindParam(":description", $this->description);
            $stmt->bindParam(":created_at", $this->created_at);
    
            if ($stmt->execute()) {
                return true;
            }
    
            return false;
        }
    
        public function readAll() {
            $query = "SELECT * FROM " . $this->table_name . " ORDER BY created_at DESC";
    
            $stmt = $this->conn->prepare($query);
            $stmt->execute();
    
            return $stmt;
        }
    }
    

    3. Controller

    No arquivo Controller/TaskController.php, crie a lógica para processar as requisições:

    <?php
    include_once '../config/database.php';
    include_once '../Model/Task.php';
    
    class TaskController {
        private $task;
    
        public function __construct() {
            $database = new Database();
            $db = $database->getConnection();
            $this->task = new Task($db);
        }
    
        public function createTask($title, $description) {
            $this->task->title = $title;
            $this->task->description = $description;
            $this->task->created_at = date('Y-m-d H:i:s');
    
            return $this->task->create();
        }
    
        public function listTasks() {
            return $this->task->readAll();
        }
    }
    

    4. View

    No arquivo View/TaskView.php, crie a interface de usuário para listar e adicionar tarefas:

    <?php
    include_once '../Controller/TaskController.php';
    
    class TaskView {
        private $controller;
    
        public function __construct() {
            $this->controller = new TaskController();
        }
    
        public function displayTasks() {
            $tasks = $this->controller->listTasks();
    
            echo "<h1>Task List</h1>";
            echo "<ul>";
    
            while ($row = $tasks->fetch(PDO::FETCH_ASSOC)) {
                extract($row);
                echo "<li>{$title} - {$description} (Created at: {$created_at})</li>";
            }
    
            echo "</ul>";
        }
    
        public function addTaskForm() {
            echo '<form method="post" action="index.php">
                    <input type="text" name="title" placeholder="Title" required>
                    <textarea name="description" placeholder="Description" required></textarea>
                    <button type="submit" name="submit">Add Task</button>
                  </form>';
        }
    }
    

    5. Arquivo de Entrada (index.php)

    No arquivo public/index.php, gerencie a lógica da interface e controle a entrada do usuário:

    <?php
    include_once '../View/TaskView.php';
    
    $view = new TaskView();
    
    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) {
        $title = $_POST['title'];
        $description = $_POST['description'];
    
        if ($view->controller->createTask($title, $description)) {
            echo "Task created successfully!";
        } else {
            echo "Unable to create task.";
        }
    }
    
    $view->addTaskForm();
    $view->displayTasks();
    

    Executando o Projeto

    1. Certifique-se de que o servidor web está configurado para apontar para o diretório public/.
    2. Acesse o aplicativo no navegador. Você deve ser capaz de adicionar novas tarefas e ver a lista de tarefas existentes.

    Explore, Contribua e Cresça Conosco!

    Obrigado por ler o nosso artigo! Esperamos que você tenha encontrado informações valiosas e inspiradoras. Se você está empolgado para saber mais, temos uma vasta coleção de artigos sobre tópicos variados, desde tendências tecnológicas até insights sobre desenvolvimento de software. Não deixe de explorar nossas outras publicações!

    Quer fazer parte da nossa comunidade?

    Inscreva-se no nosso site para receber as últimas atualizações e novidades diretamente no seu e-mail. Seu cadastro é o primeiro passo para se conectar com uma rede de entusiastas e profissionais apaixonados pelo que fazem.

    Tem algo a compartilhar?

    Adoraríamos ouvir suas ideias, inovações e experiências! Sinta-se à vontade para escrever e enviar seus próprios artigos, códigos ou projetos. Sua contribuição é fundamental para enriquecer nosso conteúdo e ajudar outros leitores a crescer junto com você. Juntos, podemos criar um espaço de aprendizado e troca de conhecimento enriquecedor. Seu conhecimento e entusiasmo são o que fazem nossa comunidade especial.

    Inscreva-se Agora | Compartilhe | Contribua com um Artigo
    Continue explorando e seja parte da transformação!

    Voltar