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

Шаблонизатор Blade и верстка интерфейса

Изучение встроенного шаблонизатора Laravel. Создание переиспользуемых шаблонов (Layouts), компонентов и безопасный вывод динамических данных магазина.

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

Введение в Blade: Элегантный HTML

В паттерне MVC буква V означает View (Представление). В Laravel представления пишутся с использованием мощного шаблонизатора Blade. Файлы Blade имеют расширение .blade.php и хранятся в директории resources/views.

Зачем нужен шаблонизатор, если PHP сам по себе может выводить HTML? Во-первых, безопасность. Когда вы выводите данные в чистом PHP через echo, вы должны вручную использовать функции вроде htmlspecialchars() для защиты от XSS (межсайтового скриптинга). Blade делает это автоматически при использовании синтаксиса двойных фигурных скобок {{ $variable }}. Любой вредоносный JavaScript-код, введенный пользователем, будет экранирован и выведен как обычный текст.

Во-вторых, Blade предоставляет удобные директивы для управления потоком (условия, циклы), которые делают код намного чище. Вместо громоздких конструкций <?php foreach($items as $item): ?> вы используете лаконичное @foreach. Это значительно повышает читаемость кода, особенно при верстке сложных интерфейсов интернет-магазина, таких как каталог товаров или страница оформления заказа.

html
<!-- Пример файла resources/views/products/index.blade.php -->
<h1>Каталог товаров</h1>

@if(count($products) > 0)
    <div class="product-list">
        @foreach($products as $product)
            <div class="product-card">
                <!-- Безопасный вывод данных -->
                <h2>{{ $product['name'] }}</h2>
                <p>Цена: {{ $product['price'] }} руб.</p>
                
                <!-- Генерация ссылки на основе именованного маршрута -->
                <a href="{{ route('cart.add', ['id' => $product['id']]) }}">
                    Добавить в корзину
                </a>
            </div>
        @endforeach
    </div>
@else
    <p>К сожалению, товаров пока нет.</p>
@endif

Наследование шаблонов (Layouts)

Любой веб-сайт имеет повторяющиеся элементы: шапку (header), подвал (footer), навигационное меню. Чтобы не копировать этот HTML-код на каждую страницу каталога или корзины, в Blade используется концепция наследования шаблонов.

Сначала мы создаем главный файл (Layout), например resources/views/layouts/app.blade.php. В нем мы размещаем весь базовый HTML-каркас. В тех местах, где должен меняться контент (например, основная часть страницы), мы используем директиву @yield('content'). Эта директива работает как 'заполнитель' (placeholder).

Затем, создавая конкретную страницу (например, карточку товара), мы указываем, что она наследует главный шаблон с помощью директивы @extends('layouts.app'). А сам уникальный контент страницы мы оборачиваем в блок @section('content') ... @endsection. Когда Laravel рендерит страницу, он берет главный шаблон и вставляет содержимое секции на место соответствующего @yield. Это классический пример принципа DRY (Don't Repeat Yourself).

html
<!-- 1. Главный шаблон: resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>
    <title>Мой Интернет-магазин - @yield('title', 'Главная')</title>
</head>
<body>
    <header>
        <nav>Меню магазина | <a href="{{ route('cart.index') }}">Корзина</a></nav>
    </header>

    <main>
        <!-- Сюда будет вставлен контент дочерних страниц -->
        @yield('content')
    </main>

    <footer>&copy; 2023 Все права защищены</footer>
</body>
</html>


<!-- 2. Дочерняя страница: resources/views/home.blade.php -->
@extends('layouts.app')

@section('title', 'Каталог')

@section('content')
    <h1>Добро пожаловать в наш магазин!</h1>
    <p>Лучшие товары по лучшим ценам.</p>
@endsection

Какая директива Blade используется для экранированного (безопасного) вывода значения переменной?

Укажите директиву Blade, которая указывает, какой родительский шаблон (layout) должна использовать текущая страница (без фигурных скобок и кавычек, только само слово с символом @).