Skip to content

Веб-система управления библиотекой на PHP с админ-панелью

Notifications You must be signed in to change notification settings

i-panov/php-library-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 Система управления книгами

Современная веб-система управления библиотекой, разработанная на PHP с использованием фреймворка Yii 2. Система предоставляет полный функционал для управления книгами, авторами и категориями с интуитивно понятным интерфейсом.

✨ Основные возможности

  • 📖 Управление книгами: добавление, редактирование, удаление книг с обложками
  • 👥 Управление авторами: создание и связывание авторов с книгами
  • 📁 Иерархические категории: организация книг по категориям и подкатегориям
  • 🔍 Умная фильтрация: поиск и фильтрация книг по названию, автору, статусу
  • 🛡️ Система аутентификации: защищенная админ-панель
  • 📱 Адаптивный дизайн: Bootstrap 5 для всех устройств
  • 🗄️ Импорт данных: автоматическая загрузка книг из внешних источников

🛠️ Технологии

  • Backend: PHP 8.2, Yii Framework 2.0.45
  • Frontend: Bootstrap 5, HTML5, CSS3, JavaScript
  • База данных: MySQL 8.0
  • Веб-сервер: Nginx + PHP-FPM
  • Контейнеризация: Docker, Docker Compose
  • Тестирование: Codeception
  • Почта: Symfony Mailer

🚀 Быстрый старт

Предварительные требования

  • Docker и Docker Compose
  • Git

Установка и запуск

  1. Клонируйте репозиторий:
git clone <repository-url>
cd books-management-system
  1. Запустите контейнеры:
docker-compose up -d --build
  1. Выполните миграции базы данных:
docker-compose exec php php yii migrate
  1. Загрузите тестовые данные:
docker-compose exec php php yii books/load
  1. Откройте приложение: Перейдите по адресу: http://localhost:8080

📖 Структура проекта

├── src/                     # Основной код приложения
│   ├── config/             # Конфигурационные файлы
│   ├── controllers/        # Контроллеры (SiteController, AdminController)
│   ├── forms/              # Формы для валидации данных
│   ├── models/             # Модели (Book, Author, Category)
│   ├── views/              # Шаблоны представлений
│   ├── migrations/         # Миграции базы данных
│   ├── commands/           # Консольные команды
│   ├── assets/             # Статические ресурсы
│   └── web/                # Публичная директория
├── php/                    # Dockerfile для PHP
├── nginx/                  # Конфигурация Nginx
├── mysql/                  # Инициализационные скрипты MySQL
└── tests/                  # Тесты (Codeception)

🎯 Использование

Публичная часть

  • Главная страница (/) - отображение категорий верхнего уровня
  • Категории (/site/category?categoryId=X) - список книг в категории с фильтрацией
  • Детали книги (/site/book?isbn=X) - подробная информация о книге
  • Контакты (/site/contact) - форма обратной связи

Админ-панель

  • Вход (/admin/login) - аутентификация администратора
  • Управление категориями (/admin/category) - CRUD операции с категориями
  • Управление книгами (/admin/book) - CRUD операции с книгами

Консольные команды

# Загрузка книг из внешнего источника
docker-compose exec php php yii books/load

# Выполнение миграций
docker-compose exec php php yii migrate

# Сброс кэша
docker-compose exec php php yii cache/flush-all

📊 Структура базы данных

Основные таблицы

  • books - информация о книгах (ISBN как первичный ключ)
  • authors - список авторов
  • categories - иерархические категории
  • books_authors - связь многие-ко-многим между книгами и авторами

Схема данных

categories (id, parent_id, name)
books (isbn, title, pageCount, publishedDate, shortDescription, longDescription, status, category_id)
authors (id, name)
books_authors (author_id, isbn)

🔧 Конфигурация

Переменные окружения

Создайте файл .env в корне проекта:

DB_HOST=mysql
DB_NAME=books_db
DB_USER=bookuser
DB_PASSWORD=bookpass
MYSQL_ROOT_PASSWORD=rootpass
MYSQL_DATABASE=books_db
MYSQL_USER=bookuser
MYSQL_PASSWORD=bookpass

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

Конфигурация подключения к БД находится в src/config/db.php:

return [
    'class' => 'yii\db\Connection',
    'dsn' => "mysql:host={$_ENV['DB_HOST']};dbname={$_ENV['DB_NAME']}",
    'username' => $_ENV['DB_USER'],
    'password' => $_ENV['DB_PASSWORD'],
    'charset' => 'utf8',
];

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

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

# Unit тесты
docker-compose exec php vendor/bin/codecept run unit

# Functional тесты  
docker-compose exec php vendor/bin/codecept run functional

# Acceptance тесты
docker-compose exec php vendor/bin/codecept run acceptance

Структура тестов

  • Unit - тестирование отдельных компонентов
  • Functional - тестирование контроллеров
  • Acceptance - тестирование пользовательского интерфейса

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

Аутентификация и авторизация

  • Доступ к админ-панели только для авторизованных пользователей
  • Защита от CSRF атак через встроенные средства Yii
  • Валидация всех входных данных
  • Защита от SQL-инъекций через prepared statements

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

  1. Регулярно обновляйте зависимости
  2. Используйте HTTPS в production
  3. Настройте файрвол для базы данных
  4. Ограничьте доступ к файлам конфигурации

🚀 Развертывание в Production

1. Подготовка сервера

# Установите Docker и Docker Compose
sudo apt update
sudo apt install docker.io docker-compose

2. Настройка SSL (рекомендуется)

server {
    listen 443 ssl;
    server_name yourdomain.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    
    # остальная конфигурация...
}

3. Мониторинг и логирование

  • Логи приложения: docker-compose logs -f php
  • Логи Nginx: docker-compose logs -f nginx
  • Логи MySQL: docker-compose logs -f mysql

4. Резервное копирование

# Создание резервной копии БД
docker-compose exec mysql mysqldump -u bookuser -pbookpass books_db > backup.sql

# Восстановление из резервной копии
docker-compose exec -T mysql -u bookuser -pbookpass books_db < backup.sql

About

Веб-система управления библиотекой на PHP с админ-панелью

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published