Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • JupyterHub
    • Soft
  1. ИСиТ
  2. РВПсИПП
  3. Практика
  4. Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
  5. Методические рекомендации по выполнению работы
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Фомы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
        • Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
          • Методические рекомендации по выполнению работы
          • Варианты заданий для расчетно-графической работы
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
      • Темы курсовых проектов по дисциплине “Программирование сетевых приложений”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа "Методы одномерной оптимизации"
          • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Основы программирования на Python”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
        • Лаб. работа “Предобработка данных”
        • Лаб. работа “Машинное обучение: классификация”
        • Лаб. работа “Создание и обучение простейших нейронных сетей”
        • Лаб. работа “Системы массового обслуживания”
        • Лаб. работа “Обработка естественного языка”
        • Лаб. работа “Компьютерное зрение”
        • Лаб. работа “Нейросети и глубокое обучение”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”
    • ИППРПО
      • Теория
      • Практика
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Управление процессами в Shell”
        • Лаб. работа “Управление файловой системой в Shell”
        • Лаб. работа “Управление пакетами в ОС Linux”
        • Лаб. работа “Сетевые инструменты в Linux”
        • Лаб. работа “Мониторинг и анализ системы Linux”
        • Лаб. работа “Основы Docker. Управление контейнерами”
        • Лаб. работа “Docker: Сети”
        • Лаб. работа "Docker: Образы"
        • Лаб. работа “Docker Compose: Управление многоконтейнерными приложениями”
        • Лаб. работа “CI/CD с GitLab”

Содержание

  • Методические рекомендации по выполнению расчетно-графической работы
    • Подготовка окружения
      • Требования к системе
      • Установка Laravel
      • Настройка базы данных
    • Пошаговое руководство по разработке
      • Этап 1: Анализ и проектирование
      • Этап 2: Создание миграций
      • Этап 3: Создание моделей
      • Этап 4: Создание контроллеров
      • Этап 5: Настройка маршрутов
      • Этап 6: Создание представлений
      • Этап 7: Реализация валидации
      • Этап 8: Аутентификация и авторизация
      • Этап 9: Работа с коллекциями
    • Рекомендации по качеству кода
      • Принципы написания кода
      • Оптимизация запросов
      • Безопасность
    • Тестирование
      • Написание тестов
      • Запуск тестов
    • Распространенные ошибки и их решение
      • 1. Ошибка “Class not found”
      • 2. Проблемы с правами доступа к файлам
      • 3. Ошибка подключения к базе данных
      • 4. Проблемы с миграциями
    • Полезные ресурсы
    • Советы по успешному выполнению работы
  1. ИСиТ
  2. РВПсИПП
  3. Практика
  4. Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
  5. Методические рекомендации по выполнению работы

Методические рекомендации по выполнению работы

Материалы для выполнения расчетно-графической работы по разработке веб-приложений с использованием фреймворка Laravel

Методические рекомендации по выполнению расчетно-графической работы

Подготовка окружения

Требования к системе

  1. PHP версии 8.1 или выше
  2. Composer - менеджер пакетов PHP
  3. СУБД - SQLite, MySQL/MariaDB или PostgreSQL
  4. Web-сервер - Apache или Nginx (опционально, можно использовать встроенный сервер Laravel)
  5. Git - система контроля версий

Установка Laravel

# Создание нового проекта
composer create-project laravel/laravel project-name

# Переход в директорию проекта
cd project-name

# Настройка файла окружения
cp .env.example .env

# Генерация ключа приложения
php artisan key:generate

Настройка базы данных

SQLite:

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=

MySQL:

# .env файл
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password

Пошаговое руководство по разработке

Этап 1: Анализ и проектирование

  1. Изучите предметную область вашего варианта
  2. Определите основные сущности и их атрибуты
  3. Постройте ER-диаграмму связей между сущностями
  4. Спланируйте структуру приложения

Этап 2: Создание миграций

# Создание миграции для таблицы
php artisan make:migration create_books_table

# Применение миграций
php artisan migrate

# Откат миграций
php artisan migrate:rollback

Пример миграции:

// database/migrations/create_books_table.php
public function up()
{
    Schema::create('books', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->text('description')->nullable();
        $table->integer('year');
        $table->decimal('price', 8, 2);
        $table->foreignId('author_id')->constrained();
        $table->timestamps();
    });
}

Этап 3: Создание моделей

# Создание модели с миграцией и factory
php artisan make:model Book -mf

Пример модели:

// app/Models/Book.php
class Book extends Model
{
    use HasFactory;
    
    protected $fillable = [
        'title',
        'description',
        'year',
        'price',
        'author_id'
    ];
    
    public function author()
    {
        return $this->belongsTo(Author::class);
    }
    
    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }
}

Этап 4: Создание контроллеров

# Создание resource-контроллера
php artisan make:controller BookController --resource

Пример контроллера:

// app/Http/Controllers/BookController.php
class BookController extends Controller
{
    public function index()
    {
        $books = Book::with(['author', 'categories'])->paginate(10);
        return view('books.index', compact('books'));
    }
    
    public function create()
    {
        $authors = Author::all();
        $categories = Category::all();
        return view('books.create', compact('authors', 'categories'));
    }
    
    public function store(Request $request)
    {
        $validated = $request->validate([
            'title' => 'required|string|max:255',
            'description' => 'nullable|string',
            'year' => 'required|integer|min:1900|max:' . date('Y'),
            'price' => 'required|numeric|min:0',
            'author_id' => 'required|exists:authors,id',
            'categories' => 'nullable|array',
            'categories.*' => 'exists:categories,id'
        ]);
        
        $book = Book::create($validated);
        $book->categories()->attach($request->categories);
        
        return redirect()->route('books.index')
            ->with('success', 'Книга успешно добавлена');
    }
    
    // Другие методы...
}

Этап 5: Настройка маршрутов

// routes/web.php
Route::resource('books', BookController::class);
Route::get('/books/search', [BookController::class, 'search'])->name('books.search');

// Маршруты аутентификации
Auth::routes();

Этап 6: Создание представлений

Структура директории представлений:

resources/views/
├── layouts/
│   └── app.blade.php
├── books/
│   ├── index.blade.php
│   ├── create.blade.php
│   ├── edit.blade.php
│   └── show.blade.php
└── partials/
    ├── navbar.blade.php
    └── sidebar.blade.php

Пример главного макета:

<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@yield('title', 'Приложение')</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container">
            <a class="navbar-brand" href="{{ route('home') }}">Мое приложение</a>
            @guest
                <a class="btn btn-outline-light" href="{{ route('login') }}">Войти</a>
            @else
                <span class="navbar-text me-3">{{ Auth::user()->name }}</span>
                <a class="btn btn-outline-light" href="{{ route('logout') }}">Выйти</a>
            @endguest
        </div>
    </nav>
    
    <main class="container mt-4">
        @include('partials.messages')
        @yield('content')
    </main>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Этап 7: Реализация валидации

Валидация в контроллере:

public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|string|max:255',
        'email' => 'required|email|unique:users,email',
        'password' => 'required|string|min:8|confirmed',
    ], [
        'title.required' => 'Поле название обязательно для заполнения',
        'email.email' => 'Введите корректный email адрес',
        'password.min' => 'Пароль должен содержать минимум 8 символов',
    ]);
    
    // Сохранение данных
}

Форма с выводом ошибок:

<form method="POST" action="{{ route('books.store') }}">
    @csrf
    <div class="mb-3">
        <label for="title" class="form-label">Название</label>
        <input type="text" class="form-control @error('title') is-invalid @enderror" 
               id="title" name="title" value="{{ old('title') }}">
        @error('title')
            <div class="invalid-feedback">{{ $message }}</div>
        @enderror
    </div>
    <!-- Другие поля -->
    <button type="submit" class="btn btn-primary">Сохранить</button>
</form>

Этап 8: Аутентификация и авторизация

# Установка пакетов аутентификации
composer require laravel/ui

# Генерация scaffold аутентификации
php artisan ui bootstrap --auth

# Установка зависимостей и компиляция
npm install && npm run dev

Middleware для проверки прав доступа:

# Создание middleware
php artisan make:middleware AdminMiddleware
// app/Http/Middleware/AdminMiddleware.php
public function handle(Request $request, Closure $next)
{
    if (!Auth::check() || !Auth::user()->isAdmin()) {
        abort(403, 'Доступ запрещен');
    }
    
    return $next($request);
}

Этап 9: Работа с коллекциями

// Фильтрация данных
$activeBooks = Book::where('status', 'active')->get();
$expensiveBooks = $activeBooks->filter(function ($book) {
    return $book->price > 100;
});

// Группировка данных
$booksByAuthor = Book::with('author')->get()->groupBy('author.name');

// Преобразование данных
$bookTitles = Book::all()->pluck('title');
$bookStats = Book::all()->map(function ($book) {
    return [
        'title' => $book->title,
        'price_with_tax' => $book->price * 1.2
    ];
});

Рекомендации по качеству кода

Принципы написания кода

  1. Следуйте PSR-12 для форматирования кода
  2. Используйте осмысленные имена переменных и методов
  3. Разделяйте ответственность между классами
  4. Пишите комментарии для сложного кода
  5. Используйте Type Hinting для параметров и возвращаемых значений

Оптимизация запросов

// Плохо: проблема N+1 запроса
$books = Book::all();
foreach ($books as $book) {
    echo $book->author->name; // Отдельный запрос для каждой книги
}

// Хорошо: предварительная загрузка
$books = Book::with('author')->get();
foreach ($books as $book) {
    echo $book->author->name; // Дополнительные запросы не требуются
}

Безопасность

  1. Используйте CSRF-токены в формах
  2. Экранируйте вывод данных в шаблонах
  3. Валидируйте все входные данные
  4. Используйте подготовленные выражения (Laravel делает это автоматически)
  5. Правильно настраивайте права доступа к файлам

Тестирование

Написание тестов

# Создание теста
php artisan make:test BookTest
// tests/Feature/BookTest.php
class BookTest extends TestCase
{
    public function test_book_can_be_created()
    {
        $user = User::factory()->create();
        $author = Author::factory()->create();
        
        $response = $this->actingAs($user)->post('/books', [
            'title' => 'Test Book',
            'author_id' => $author->id,
            'year' => 2023,
            'price' => 29.99
        ]);
        
        $response->assertRedirect('/books');
        $this->assertDatabaseHas('books', ['title' => 'Test Book']);
    }
}

Запуск тестов

# Запуск всех тестов
php artisan test

# Запуск конкретного теста
php artisan test --filter BookTest

Распространенные ошибки и их решение

1. Ошибка “Class not found”

Решение: Выполните composer dump-autoload

2. Проблемы с правами доступа к файлам

Решение:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

3. Ошибка подключения к базе данных

Решение: Проверьте настройки в файле .env и выполните php artisan config:cache

4. Проблемы с миграциями

Решение: Проверьте порядок миграций и внешние ключи

Полезные ресурсы

  1. Laravel Documentation
  2. Laracasts
  3. Laravel News
  4. Laravel Package Repository
  5. Laravel Debugbar - инструмент отладки

Советы по успешному выполнению работы

  1. Начинайте с простого и постепенно добавляйте функциональность
  2. Используйте систему контроля версий Git для отслеживания изменений
  3. Регулярно делайте резервные копии проекта
  4. Тестируйте каждую функцию после реализации
  5. Обращайтесь к документации Laravel при возникновении вопросов
  6. Не бойтесь экспериментировать с различными подходами
  7. Планируйте время равномерно на все этапы работы

Помните, что качественное приложение требует времени и внимания к деталям. Начинайте работу как можно раньше и не откладывайте сложные задачи на последний момент.

Наверх
Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
Варианты заданий для расчетно-графической работы