Уроки курса
1 Основы синтаксиса PHP 8
60 мин
2 Функции и управляющие конструкции
60 мин
3 Объектно-ориентированное программирование на PHP
60 мин
4 Наследование, интерфейсы и полиморфизм
60 мин
5 Основы баз данных MySQL и работа через PDO
60 мин
6 Архитектурный паттерн MVC
60 мин
7 Введение в Laravel и настройка окружения
60 мин
8 Маршрутизация и контроллеры в Laravel
60 мин
9 Шаблонизатор Blade и создание интерфейса
60 мин
10 Миграции баз данных и Eloquent ORM
60 мин
11 Связи моделей в Eloquent — Настройка связей 'один …
60 мин
12 Аутентификация и защита маршрутов
60 мин
13 Разработка каталога товаров и категорий
60 мин
14 Реализация корзины покупок через сессии
60 мин
15 Оформление заказа и транзакции базы данных
60 мин
16 Интеграция платежной системы Stripe
60 мин
17 Интеграция платежной системы Vipps
60 мин
18 Разработка панели администратора
60 мин
19 Оптимизация и подготовка к production
60 мин
20 Деплой Laravel-приложения на сервер
60 мин
21 Основы PHP 8: Синтаксис, переменные и управляющие конструкции
60 мин
22 Функции и массивы в PHP 8
60 мин
23 Объектно-ориентированное программирование: Классы и объекты
60 мин
24 Продвинутое ООП: Наследование, интерфейсы и полиморфизм
60 мин
25 Основы баз данных: Проектирование БД и работа с …
60 мин
26 Взаимодействие PHP с MySQL через PDO
60 мин
27 Архитектура MVC и введение в фреймворк Laravel
60 мин
28 Маршрутизация и контроллеры в Laravel
60 мин
29 Шаблонизатор Blade: Создание пользовательского интерфейса
60 мин
30 Миграции и Eloquent ORM: Создание таблиц товаров
60 мин
31 Связи в Eloquent ORM: Отношения между моделями
60 мин
32 Аутентификация и авторизация пользователей
60 мин
33 Разработка каталога товаров: Вывод, фильтрация и пагинация
60 мин
34 Реализация корзины покупок с использованием сессий
60 мин
35 Оформление заказа: Работа с формами и валидация
60 мин
36 Транзакции базы данных: Сохранение заказа
60 мин
37 Интеграция платежной системы Stripe
60 мин
38 Интеграция платежной системы Vipps
60 мин
39 Создание панели администратора
60 мин
40 Подготовка к production и деплой приложения
60 мин
41 Основы PHP 8 и синтаксис
60 мин
42 Объектно-ориентированное программирование на PHP
60 мин
43 Продвинутое ООП и интерфейсы
60 мин
44 Основы баз данных и MySQL
60 мин
45 Архитектурный паттерн MVC
60 мин
46 Введение в Laravel и маршрутизация
60 мин
47 Шаблонизатор Blade и верстка интерфейса
60 мин
48 Миграции и структура базы данных
60 мин
49 Eloquent ORM и модели
60 мин
50 Отношения в Eloquent ORM
60 мин
51 Авторизация и защита маршрутов
60 мин
52 Создание каталога товаров
60 мин
53 Реализация корзины покупок
60 мин
54 Оформление заказа и транзакции БД
60 мин
55 Интеграция платежной системы Stripe
60 мин
56 Интеграция платежной системы Vipps
60 мин
57 Панель администратора: управление товарами
60 мин
58 Панель администратора: управление заказами
60 мин
59 Подготовка к production и деплой
60 мин
60 Запуск и тестирование готового интернет-магазина
60 мин

Архитектурный паттерн MVC

Разделение логики приложения на модели, представления и контроллеры для грамотного структурирования кода.

Прогресс урока: 0%

В предыдущих уроках мы изучили основы PHP, объектно-ориентированное программирование и работу с базами данных MySQL. Теперь, прежде чем переходить к фреймворку Laravel, критически важно понять фундаментальную архитектуру, на которой он построен — паттерн MVC (Model-View-Controller). Паттерн проектирования — это типовое, проверенное временем решение частой проблемы в архитектуре программного обеспечения. В контексте веб-разработки главной проблемой всегда было смешивание логики (например, SQL-запросов) и отображения (HTML-тегов) в одном файле. Это приводило к созданию так называемого 'спагетти-кода', который невозможно масштабировать, тестировать и поддерживать. Паттерн MVC решает эту проблему, строго разделяя приложение на три взаимосвязанных, но независимых компонента.

Модель (Model) отвечает за бизнес-логику и данные приложения. Она ничего не знает о том, как данные будут показаны пользователю. Ее задача — извлечь данные из базы данных (например, таблицу товаров), обработать их (применить скидки, проверить наличие на складе) и вернуть результат. Представление (View) отвечает исключительно за пользовательский интерфейс. Это HTML, CSS и минимальные вкрапления PHP для вывода данных. Представление получает готовые данные и просто 'рисует' их. Контроллер (Controller) — это связующее звено, мозг операции. Он принимает HTTP-запрос от пользователя (например, клик по кнопке 'Добавить в корзину'), обращается к нужной Модели за данными, а затем передает эти данные в соответствующее Представление для генерации HTML-ответа.

Рассмотрим применение MVC на примере нашего будущего интернет-магазина. Представьте сценарий: пользователь заходит на страницу каталога товаров (URL: /products). Жизненный цикл запроса выглядит следующим образом: 1. Пользователь вводит URL. Маршрутизатор (Router) перехватывает этот запрос и направляет его в ProductController. 2. Метод index() в ProductController понимает, что нужно показать список товаров. Он обращается к модели Product. 3. Модель Product выполняет SQL-запрос к базе данных MySQL (например, SELECT * FROM products WHERE active = 1) и возвращает массив объектов товаров обратно в контроллер. 4. Контроллер берет этот массив и передает его в представление products.index. 5. Представление использует цикл (например, foreach), чтобы сгенерировать HTML-карточки для каждого товара, подставляя названия и цены. 6. Готовый HTML-документ отправляется обратно в браузер пользователя.

Типичная ошибка новичков: Написание SQL-запросов прямо в контроллере или, что еще хуже, в представлении. Запомните золотое правило MVC: 'Толстые модели, тонкие контроллеры'. Контроллер должен содержать минимум логики — только прием запроса, делегирование задачи модели и возврат ответа. Вся сложная бизнес-логика (расчет налогов, проверка прав) должна инкапсулироваться внутри моделей или специализированных сервисных классов. Это позволяет переиспользовать логику в разных частях приложения (например, при создании API для мобильного приложения вам не придется дублировать код, вы просто обратитесь к той же модели).

График

php
// Пример концепции контроллера (до Laravel)
class ProductController {
    public function index() {
        // 1. Обращение к Модели
        $productModel = new ProductModel();
        $products = $productModel->getAllActiveProducts();

        // 2. Передача данных в Представление
        require_once 'views/products_list.php';
    }
}

// Пример концепции Модели
class ProductModel {
    public function getAllActiveProducts() {
        // В реальности здесь PDO запрос к БД
        return [
            ['id' => 1, 'name' => 'Laptop', 'price' => 1000],
            ['id' => 2, 'name' => 'Mouse', 'price' => 50]
        ];
    }
}

Какой компонент в паттерне MVC должен отвечать за выполнение SQL-запросов к базе данных?

Как называется компонент MVC, который принимает HTTP-запрос от пользователя и управляет потоком данных между моделью и представлением?