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

Маршрутизация и контроллеры в Laravel

Создание маршрутов, обработка HTTP-запросов и передача данных из контроллеров в представления.

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

Маршрутизация (Routing) — это механизм, который сопоставляет входящие HTTP-запросы (URL в браузере) с конкретным кодом вашего приложения, который должен этот запрос обработать. В Laravel все веб-маршруты регистрируются в файле routes/web.php. Маршрутизатор Laravel поддерживает все основные HTTP-глаголы: GET (для получения данных, например, страницы каталога), POST (для отправки данных, например, формы оформления заказа), PUT/PATCH (для обновления) и DELETE. Самый простой маршрут может возвращать строку или представление напрямую, но в архитектуре MVC маршруты обычно указывают на методы контроллеров.

При создании интернет-магазина мы активно используем группировку маршрутов и Middleware (Посредники). Middleware — это слой кода, который фильтрует входящие запросы. Например, мы не хотим, чтобы неавторизованный гость мог зайти на страницу профиля или завершить оформление заказа. Как показано в упражнении 3.1 из нашего архива, мы можем использовать middleware auth для защиты группы маршрутов. Если гость попытается зайти на /checkout, middleware автоматически перенаправит его на страницу логина. Маршрутам также принято давать имена (метод name()), чтобы в шаблонах можно было генерировать ссылки динамически с помощью функции route('checkout.index'), а не жестко прописывать URL /checkout.

Контроллеры в Laravel группируют связанную логику обработки запросов в один класс. Они хранятся в app/Http/Controllers. Для генерации контроллера используется интерфейс командной строки Artisan: php artisan make:controller ProductController. Внутри контроллера мы создаем методы (экшены), такие как index() для показа списка, show() для показа одного товара, store() для сохранения. Контроллер часто работает с объектом класса Illuminate\Http\Request, который Laravel автоматически внедряет (Dependency Injection) в метод. Этот объект содержит все данные текущего запроса: параметры из URL, данные из POST-форм, загруженные файлы и сессии.

Рассмотрим пример добавления товара в корзину (из упражнения 2.1). Метод add(Request $request) в CartController извлекает product_id из запроса: $request->input('product_id'). Затем он обращается к фасаду сессии (Session), чтобы получить текущее состояние корзины, обновляет количество товара и сохраняет массив обратно в сессию, после чего делает редирект (перенаправление) пользователя назад с сообщением об успехе. Это классический пример 'тонкого' контроллера, который координирует действия между HTTP-запросом, хранилищем сессий и HTTP-ответом.

php
// Файл: routes/web.php
use App\Http\Controllers\ProductController;
use App\Http\Controllers\CheckoutController;
use App\Http\Controllers\ProfileController;

// Публичный маршрут для всех
Route::get('/products', [ProductController::class, 'index'])->name('products.index');

// Защищенные маршруты (доступны только авторизованным)
Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'index'])->name('profile');
    Route::get('/checkout', [CheckoutController::class, 'index'])->name('checkout');
    Route::post('/checkout', [CheckoutController::class, 'process']);
});
php
// Файл: app/Http/Controllers/ProductController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
// Подключение модели (изучим в 10 уроке)
// use App\Models\Product;

class ProductController extends Controller {
    public function index() {
        // Эмуляция получения товаров из БД (Упражнение 3.1)
        $products = [
            ['id' => 1, 'name' => 'Laptop', 'price' => 1000],
            ['id' => 2, 'name' => 'Smartphone', 'price' => 500]
        ];

        // Передача массива $products в представление resources/views/products/index.blade.php
        return view('products.index', ['products' => $products]);
    }
}

Какая функция используется в файле web.php для применения фильтра (например, проверки авторизации) к маршруту или группе маршрутов?

Напишите команду Artisan для создания контроллера с именем CartController.