Уроки курса
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 и создание интерфейса

Создание переиспользуемых макетов страниц (layouts) и вывод динамических данных интернет-магазина в HTML.

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

Для генерации HTML-кода в Laravel используется мощный встроенный шаблонизатор Blade. В отличие от других шаблонизаторов (например, Twig или Smarty), Blade не ограничивает вас в использовании обычного PHP-кода внутри представлений, но предоставляет удобные директивы для распространенных задач, делая код намного чище и читабельнее. Файлы Blade имеют расширение .blade.php и хранятся в директории resources/views. Одной из главных особенностей Blade является встроенная защита от XSS-уязвимостей (Cross-Site Scripting). Когда вы выводите переменную с помощью двойных фигурных скобок {{ $variable }}, Blade автоматически пропускает данные через PHP-функцию htmlspecialchars. Это значит, что если злоумышленник введет в качестве своего имени скрипт <script>alert('hack')</script>, скрипт не выполнится в браузере, а отобразится как обычный текст.

Создание интерфейса интернет-магазина требует переиспользования общих элементов: шапки сайта (header), подвала (footer), меню навигации. В чистом PHP для этого использовались конструкции include. В Blade применяется концепция Наследования шаблонов (Layouts). Вы создаете главный каркас страницы (обычно resources/views/layouts/app.blade.php), где прописываете базовый HTML5, подключаете CSS/JS и определяете специальные 'якоря' с помощью директивы @yield('content'). Затем, при создании конкретной страницы (например, карточки товара), вы наследуете этот главный макет директивой @extends('layouts.app') и помещаете уникальный контент страницы внутрь секции @section('content') ... @endsection. При рендеринге Laravel собирает эти части воедино.

Для вывода динамических данных (например, списка товаров из базы данных, переданных из контроллера) Blade предоставляет удобные управляющие структуры, повторяющие логику PHP, но в более элегантном синтаксисе. Вместо громоздких открывающих и закрывающих тегов PHP, вы используете директиву @foreach. Например: @foreach($products as $product). Внутри цикла вы можете обращаться к свойствам объекта или массива товара. Также Blade имеет специфичные для фреймворка директивы. Например, в интернет-магазине часто нужно показывать разные элементы меню для авторизованных пользователей и гостей (кнопка 'Профиль' против 'Войти'). Для этого существуют директивы @auth (код внутри выполнится только если пользователь залогинен) и @guest (только для неавторизованных посетителей).

Важным аспектом является работа с формами. Поскольку мы разрабатываем безопасное приложение, любая POST-форма в Laravel должна быть защищена от атак межсайтовой подделки запроса (CSRF). Если вы создаете форму добавления товара в корзину, вы обязаны добавить внутрь тега <form> директиву @csrf. Эта директива генерирует скрытый input с уникальным токеном. При отправке формы Laravel проверяет, совпадает ли токен формы с токеном в сессии пользователя. Если токена нет или он неверный, запрос будет отклонен с ошибкой 419 (Page Expired).

html
<!-- resources/views/layouts/app.blade.php (Главный макет) -->
<!DOCTYPE html>
<html>
<head>
    <title>My E-commerce</title>
</head>
<body>
    <header>
        <nav>
            <a href="{{ route('products.index') }}">Каталог</a>
            @auth
                <a href="{{ route('profile') }}">Мой профиль</a>
                <a href="{{ route('checkout') }}">Корзина</a>
            @endauth
            @guest
                <a href="/login">Войти</a>
            @endguest
        </nav>
    </header>

    <main>
        <!-- Сюда будет подставляться контент дочерних страниц -->
        @yield('content')
    </main>
</body>
</html>
html
<!-- resources/views/products/index.blade.php (Страница каталога) -->
@extends('layouts.app')

@section('content')
    <h1>Каталог товаров</h1>
    
    <div class="products-grid">
        @foreach($products as $product)
            <div class="product-card">
                <!-- Безопасный вывод данных с защитой от XSS -->
                <h2>{{ $product['name'] }}</h2>
                <p>Цена: ${{ number_format($product['price'], 2) }}</p>
                
                <!-- Форма добавления в корзину -->
                <form action="/cart/add" method="POST">
                    @csrf <!-- Защита от CSRF атак обязательна! -->
                    <input type="hidden" name="product_id" value="{{ $product['id'] }}">
                    <button type="submit">В корзину</button>
                </form>
            </div>
        @endforeach
    </div>
@endsection

Какая директива Blade обязательна для использования внутри всех HTML-форм с методом POST, PUT, PATCH или DELETE для обеспечения безопасности?

Как в Blade вывести значение переменной $title с автоматическим экранированием HTML-сущностей (защита от XSS)? Укажите синтаксис.