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

Разработка панели администратора

Создание закрытой зоны для управления товарами, категориями и просмотра списка заказов. Работа с Middleware и загрузкой файлов.

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

Архитектура панели администратора

Интернет-магазин не может существовать без возможности управлять контентом. Нам нужна закрытая зона (Admin Panel), доступ к которой имеют только пользователи с особыми правами. Здесь мы применим методику Scaffolding: начнем с ограничения доступа, затем создадим маршруты, и в конце реализуем логику загрузки изображений товаров.

Простой аутентификации (проверки, что пользователь вошел в систему) недостаточно. Нам нужна авторизация — проверка прав доступа. Для этого мы добавим поле is_admin (boolean) в таблицу users.

php
// 1. Создаем Middleware:
// php artisan make:middleware IsAdmin

namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;

class IsAdmin {
    public function handle(Request $request, Closure $next) {
        // Проверяем, авторизован ли пользователь И является ли он админом
        if (auth()->check() && auth()->user()->is_admin) {
            return $next($request);
        }
        // Если нет - выдаем ошибку 403 (Доступ запрещен)
        abort(403, 'У вас нет прав для доступа к этой странице.');
    }
}

Группировка маршрутов

Вместо того чтобы применять наш новый middleware IsAdmin к каждому маршруту по отдельности, Laravel позволяет группировать их. Это делает файл web.php чистым и легко читаемым.

Внутри группы мы реализуем CRUD (Create, Read, Update, Delete) маршруты для управления товарами (Products) и категориями (Categories).

php
// routes/web.php

// Группа маршрутов для администратора
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
    
    // Dashboard (Главная панель)
    Route::get('/', [AdminController::class, 'dashboard'])->name('dashboard');
    
    // Управление товарами
    Route::resource('products', AdminProductController::class);
    
    // Управление заказами
    Route::get('/orders', [AdminOrderController::class, 'index'])->name('orders.index');
});

Загрузка изображений товаров

Одной из главных задач администратора является добавление фотографий к товарам. В Laravel для работы с файлами используется фасад Storage. Файлы обычно сохраняются на локальный диск в директорию storage/app/public. Однако эта директория недоступна из браузера напрямую в целях безопасности.

Чтобы сделать изображения видимыми на сайте, необходимо создать символическую ссылку из папки public/storage на storage/app/public. Это делается специальной Artisan командой.

Какую artisan-команду необходимо выполнить в терминале, чтобы создать символическую ссылку и сделать загруженные изображения публично доступными?

php
// Пример сохранения изображения в AdminProductController
public function store(Request $request) {
    $request->validate([
        'name' => 'required|string|max:255',
        'price' => 'required|numeric',
        'image' => 'required|image|mimes:jpeg,png,jpg|max:2048',
    ]);

    // Сохраняем файл в папку 'products' на диске 'public'
    $imagePath = $request->file('image')->store('products', 'public');

    Product::create([
        'name' => $request->name,
        'price' => $request->price,
        'image_path' => $imagePath, // В БД сохраняем только путь: products/имяфайла.jpg
    ]);

    return redirect()->route('admin.products.index')->with('success', 'Товар добавлен');
}
Действие Метод HTTP Маршрут Метод Контроллера
Показать список товаров GET /admin/products index()
Форма создания товара GET /admin/products/create create()
Сохранить новый товар POST /admin/products store()
Форма редактирования GET /admin/products/{id}/edit edit()
Обновить товар в БД PUT/PATCH /admin/products/{id} update()
Удалить товар DELETE /admin/products/{id} destroy()