Уроки курса
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 мин

Запуск и тестирование готового интернет-магазина

Студент проведет полное тестирование всех функций проекта, исправит возможные ошибки и выполнит финальный запуск интернет-магазина.

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

Комплексное тестирование системы (QA)

Поздравляем! Мы подошли к финальному этапу нашего курса — комплексному тестированию и запуску интернет-магазина (Project-Based Learning). Прежде чем открыть доступ реальным покупателям, необходимо провести End-to-End (E2E) тестирование. Это процесс проверки всего приложения от начала до конца, имитирующий действия реального пользователя. Мы должны убедиться, что все компоненты системы: база данных, маршруты, бизнес-логика и сторонние API работают как единое целое.

Тестирование делится на позитивное (ввод правильных данных) и негативное (попытки сломать систему). Что будет, если пользователь попытается добавить в корзину отрицательное количество товара? Что произойдет, если во время оплаты у пользователя пропадет интернет? Программный продукт должен грациозно обрабатывать такие ситуации, показывая понятные сообщения об ошибках, а не «падать» с белым экраном.

Задание

Сценарий ручного End-to-End тестирования магазина

  • Зарегистрируйте нового пользователя с валидными данными. Убедитесь, что пароль захеширован в БД (bcrypt).
  • Добавьте несколько товаров в корзину. Проверьте правильность расчета итоговой суммы.
  • Перейдите к оформлению заказа (Checkout). Введите неполные данные адреса — проверьте, что валидация возвращает ошибки.
  • Выберите тестовый режим оплаты (Stripe/Vipps) и завершите платеж.
  • Авторизуйтесь под учетной записью администратора. Перейдите в админ-панель.
  • Найдите новый заказ, убедитесь, что его статус изменился на 'paid' (оплачен), и в составе заказа присутствуют выбранные товары.
10 баллов

Обзор типичных ошибок и транзакции БД

Основываясь на архивных материалах курса, давайте вспомним одну из самых критичных ошибок при оформлении заказа — отсутствие транзакций базы данных (`DB::transaction`). Оформление заказа — это сложный процесс: мы создаем запись в таблице `orders`, затем в цикле добавляем записи в `order_items`, и очищаем корзину. Если на моменте добавления второго товара в `order_items` произойдет сбой (например, отключилась БД), у нас останется «повисший» заказ без товаров. Это нарушение целостности данных.

Использование транзакций гарантирует атомарность: либо все операции выполняются успешно, либо, при малейшей ошибке, все изменения отменяются (Rollback), возвращая базу данных в исходное состояние. Это золотое правило разработки финансовых и e-commerce систем.

php
<?php
// Финальный обзор правильного метода сохранения заказа (из архивных материалов)

use Illuminate\Support\Facades\DB;
use App\Models\Order;
use App\Models\OrderItem;

public function process() {
    $cart = session('cart', []);
    if (empty($cart)) return redirect()->route('cart.index');

    // Запуск транзакции БД
    DB::transaction(function () use ($cart) {
        $total = array_sum(array_map(fn($item) => $item['price'] * $item['quantity'], $cart));
        
        $order = Order::create([
            'user_id' => auth()->id(),
            'total_price' => $total,
            'status' => 'pending'
        ]);

        foreach ($cart as $id => $item) {
            OrderItem::create([
                'order_id' => $order->id,
                'product_id' => $id,
                'quantity' => $item['quantity'],
                'price' => $item['price'] // Фиксируем цену на момент покупки
            ]);
        }
    }); // Транзакция автоматически коммитится (Commit), если нет исключений

    session()->forget('cart');
    return redirect()->route('orders.success');
}

Чек-лист безопасности перед запуском

Безопасность интернет-магазина — ваша прямая ответственность (Scaffolding). Перед финальным запуском пройдитесь по этому чек-листу. 1. Защита от SQL-инъекций: убедитесь, что вы везде используете Eloquent ORM или подготовленные выражения PDO (не конкатенируете сырые строки в запросы). 2. XSS (Межсайтовый скриптинг): всегда используйте двойные фигурные скобки `{{ $variable }}` в Blade шаблонах, они автоматически экранируют HTML-теги с помощью функции `htmlspecialchars`. 3. CSRF: проверьте наличие директивы `@csrf` во всех формах с методами POST/PUT/DELETE. 4. Права доступа: убедитесь, что обычный пользователь не может получить доступ к маршрутам администратора, подменив URL.

Вы проделали огромную работу! Вы изучили основы PHP 8, объектно-ориентированное программирование, проектирование баз данных MySQL, архитектуру MVC в Laravel, интеграцию внешних API и основы деплоя. Ваш интернет-магазин готов к приему первых клиентов. Удачи в дальнейшей разработке!

Что произойдет, если внутри блока DB::transaction() произойдет ошибка или будет выброшено исключение (Exception)?