Уроки курса
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: Создание пользовательского интерфейса

Студент освоит шаблонизатор Blade для создания переиспользуемых компонентов интерфейса (layouts) и вывода динамических данных на страницах.

Прогресс урока: 0%
Введение в шаблонизатор Blade. В классическом PHP разработчики смешивали HTML-разметку и логику, используя теги . Это делало код грязным, трудночитаемым и уязвимым. Laravel использует встроенный шаблонизатор Blade, который решает эти проблемы. Blade-файлы имеют расширение .blade.php и хранятся в папке resources/views. Главная особенность Blade — он компилируется в чистый PHP-код и кэшируется до тех пор, пока в шаблон не будут внесены изменения, что означает нулевые потери производительности. Для вывода данных используется синтаксис двойных фигурных скобок: {{ $productName }}. Самое важное свойство этих скобок заключается в том, что они автоматически пропускают данные через PHP-функцию htmlspecialchars. Это обеспечивает базовую защиту от XSS (Cross-Site Scripting) атак. Если злоумышленник попытается ввести JavaScript-код 'alert(1)' в качестве имени товара, Blade выведет его как обычный текст, а не исполнит в браузере пользователя. Для вывода неэкранированного HTML (например, форматированного описания товара из WYSIWYG-редактора) используется синтаксис {!! $description !!}, но применять его нужно с крайней осторожностью.
html
<!-- resources/views/products/index.blade.php -->
<h1>Каталог товаров</h1>

@if(count($products) > 0)
    <div class="grid">
        @foreach($products as $product)
            <div class="card">
                <h3>{{ $product['name'] }}</h3>
                <p>Цена: ${{ number_format($product['price'], 2) }}</p>
                <button>В корзину</button>
            </div>
        @endforeach
    </div>
@else
    <p>Товары не найдены.</p>
@endif
Наследование шаблонов (Layouts). Любой интернет-магазин имеет повторяющиеся элементы на всех страницах: шапка (header) с логотипом и корзиной, навигационное меню, подвал (footer) с контактами. Копировать этот HTML-код на каждую страницу — нарушение принципа DRY. Blade решает эту задачу с помощью механизма наследования. Мы создаем главный шаблон (Master Layout), например resources/views/layouts/app.blade.php, который содержит общий HTML-каркас (теги , , ). Внутри этого каркаса мы определяем 'зоны', куда дочерние шаблоны будут вставлять свой контент, используя директиву @yield('content'). Когда мы создаем страницу каталога, мы используем директиву @extends('layouts.app'), чтобы указать, какой каркас использовать, и оборачиваем уникальный контент страницы в @section('content') ... @endsection. При рендеринге страницы Laravel соберет эти части воедино. Этот подход (Scaffolding структуры UI) позволяет легко менять дизайн всего сайта, редактируя только один файл layout'а.
html
<!-- resources/views/layouts/app.blade.php (Master Layout) -->
<!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>
Компоненты и директивы управления потоком. Помимо @if и @foreach, Blade предоставляет множество удобных директив. Например, @forelse позволяет объединить цикл с проверкой на пустоту: она перебирает массив, но если он пуст, выполняет блок @empty. Также Blade поддерживает включение одних шаблонов в другие с помощью директивы @include('partials.sidebar'). В современных версиях Laravel активно используются Blade-компоненты (Components). Компоненты работают подобно компонентам во фронтенд-фреймворках (React/Vue). Вы можете создать компонент кнопки (Купить) или карточки товара, инкапсулировав в них HTML и логику отображения. Это высший уровень переиспользования кода в UI. Директивы Blade также тесно интегрированы с системой авторизации: @auth выведет контент только для залогиненных пользователей (например, ссылку 'Мой профиль'), а @guest — только для неавторизованных (ссылки 'Войти' и 'Регистрация').

Задание

Сценарий: Создание страницы конкретного товара (Product Show Page). Используя методологию Chunking, разбейте задачу на шаги создания шаблонов.

  • Убедиться в наличии главного шаблона layouts/app.blade.php с @yield('content').
  • Создать файл resources/views/products/show.blade.php.
  • В начале файла show.blade.php добавить директиву @extends('layouts.app').
  • Открыть секцию @section('content').
  • Использовать двойные фигурные скобки {{ $product->name }} для вывода безопасного текста и {!! $product->description !!} для вывода HTML-описания товара.
  • Закрыть секцию директивой @endsection.
10 баллов