MVC

MVC

MVC (Model-View-Controller) — это архитектурный шаблон, который разделяет приложение на три основных компонента: Модель (Model), Представление (View) и Контроллер (Controller). Это разделение помогает упростить управление кодом, облегчает тестирование и дает возможность параллельной разработки различных компонентов.

Основные компоненты MVC:

  • Модель (Model): отвечает за бизнес-логику приложения, управление данными и взаимодействие с базами данных. Модель не знает о представлении и контроллере.
  • Представление (View): отвечает за отображение данных пользователю. Оно получает данные из модели и отображает их в удобном для пользователя формате.
  • Контроллер (Controller): служит посредником между моделью и представлением. Он обрабатывает входные данные от пользователя, взаимодействует с моделью и обновляет представление.

Пример структуры проекта

 


/project
    /app
        /controllers
            UserController.php
        /models
            UserModel.php
        /views
            user
                index.php
                profile.php
    /config
        database.php
    /public
        index.php

 

1. Model (Модель)

Модель отвечает за работу с данными. В этом примере модель UserModel взаимодействует с базой данных.

 


<?php
// app/models/UserModel.php

class UserModel {
    private $db;

    public function __construct($db) {
        $this->db = $db;
    }

    // Получить всех пользователей
    public function getUsers() {
        $query = "SELECT * FROM users";
        return $this->db->query($query)->fetchAll();
    }

    // Получить пользователя по ID
    public function getUserById($id) {
        $query = "SELECT * FROM users WHERE id = :id";
        $stmt = $this->db->prepare($query);
        $stmt->execute(['id' => $id]);
        return $stmt->fetch();
    }
}

 

2. View (Представление)

Представление отвечает за отображение данных. В этом примере два представления: index.php (список пользователей) и profile.php (профиль пользователя).


<?php
// app/views/user/index.php

echo "<h1>Список пользователей</h1>";
echo "<ul>";
foreach ($users as $user) {
    echo "<li><a href='/user/profile/{$user['id']}'>{$user['name']}</a></li>";
}
echo "</ul>";

 


<?php
// app/views/user/profile.php

echo "<h1>Профиль пользователя</h1>";
echo "<p>Имя: {$user['name']}</p>";
echo "<p>Email: {$user['email']}</p>";

 

3. Controller (Контроллер)

Контроллер обрабатывает запросы пользователя, взаимодействует с моделью и передает данные в представление.


<?php
// app/controllers/UserController.php

class UserController {
    private $model;

    public function __construct($model) {
        $this->model = $model;
    }

    // Показать список пользователей
    public function index() {
        $users = $this->model->getUsers();
        include 'app/views/user/index.php';
    }

    // Показать профиль пользователя
    public function profile($id) {
        $user = $this->model->getUserById($id);
        include 'app/views/user/profile.php';
    }
}

 

 

4. Конфигурация и точка входа

Настройка базы данных и маршрутизация запросов.

 


<?php
// config/database.php

$host = 'localhost';
$dbname = 'test';
$user = 'root';
$pass = '';

try {
    $db = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Ошибка подключения к базе данных: " . $e->getMessage());
}

 

 


<?php
// public/index.php

require '../config/database.php';
require '../app/models/UserModel.php';
require '../app/controllers/UserController.php';

// Создаем экземпляры модели и контроллера
$model = new UserModel($db);
$controller = new UserController($model);

// Обработка запросов
$action = $_GET['action'] ?? 'index';
$id = $_GET['id'] ?? null;

if ($action === 'profile' && $id) {
    $controller->profile($id);
} else {
    $controller->index();
}

 

 

5. Маршрутизация

Пример маршрутов:

  • /public/index.php — список пользователей.

  • /public/index.php?action=profile&id=1 — профиль пользователя с ID = 1.