Архитектура

Обновлено: 17.08.2026
📄 Архитектура приложения

Архитектура приложения

Обзор

CRM "Леотехно" построена на чистом PHP с использованием MVC-подхода (Model-View-Controller). Приложение разработано с акцентом на модульность, безопасность и простоту поддержки.

Ключевые принципы:

  • MVC — разделение логики, представления и данных
  • Модульность — компоненты слабо связаны
  • Безопасность — защита от SQL-инъекций, XSS, CSRF
  • Расширяемость — легко добавлять новые фичи

📁 Структура каталогов

crm-invoices/
├── 📁 config/                                 # Конфигурация
│   ├── 📄 app.php                             # Основные настройки
│   ├── 📄 database.php                        # Подключение к БД
│   ├── 📄 features.php                        # Включение/отключение функций
│   └── 📄 mail.php                            # Настройки почты

├── 📁 public/                                 # Публичная директория
│   ├── 📁 admin/                              # Административная панель
│   │   ├── 📁 ajax/                           # AJAX-обработчики
│   │   ├── 📁 api/                            # REST API
│   │   ├── 📁 assets/                         # CSS, JS, изображения
│   │   ├── 📁 export/                         # Генерация отчетов
│   │   ├── 📄 404.php
│   │   ├── 📄 dashboard.php
│   │   ├── 📄 login.php
│   │   └── 📄 orders.php
│   └── 📄 index.php                           # Точка входа

├── 📁 src/                                    # Исходный код (ядро)
│   ├── 📁 Core/                               # Базовые классы
│   │   ├── 📄 EmailTemplate.php
│   │   ├── 📄 Features.php
│   │   ├── 📄 Mailer.php
│   │   ├── 📄 Notifier.php
│   │   ├── 📄 Settings.php
│   │   └── 📄 TimeZone.php
│   │
│   ├── 📁 Models/                             # Модели данных (ORM)
│   │   ├── 📄 Client.php
│   │   ├── 📄 Order.php
│   │   ├── 📄 Product.php
│   │   └── 📄 User.php
│   │
│   ├── 📁 Services/                           # Бизнес-логика
│   │   └── 📄 OrderEmailService.php
│   │
│   ├── 📁 Helpers/                            # Вспомогательные функции
│   │   └── 📄 UrlHelper.php
│   │
│   ├── 📁 Traits/                             # Переиспользуемый код
│   │   └── 📄 FlashMessages.php
│   │
│   ├── 📄 Auth.php                            # Аутентификация
│   └── 📄 Database.php                        # Работа с БД

├── 📄 composer.json                           # PHP-зависимости
├── 📄 composer.lock
├── 📄 index.php
└── 📄 info.php

📄 Архитектурные слои

1. Представление (View)

  • PHP-шаблоны в public/admin/
  • Минимальная логика, только вывод данных
  • Используются HTML + CSS + JS

2. Контроллеры (Controller)

  • Файлы в public/admin/ (например, orders.php, clients.php)
  • Принимают запросы, валидируют данные
  • Вызывают модели и сервисы
  • Возвращают ответ (HTML или JSON)

3. Модели (Model)

  • Классы в src/Models/
  • Представляют таблицы БД
  • Содержат бизнес-логику и валидацию

4. Сервисы (Service)

  • Классы в src/Services/
  • Инкапсулируют сложную бизнес-логику
  • Отправка email, работа с внешними API

5. Ядро (Core)

  • Классы в src/Core/
  • Базовые компоненты системы
  • Переиспользуются во всех слоях

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

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

  • Auth.php — управление сессиями
  • permissions — разграничение прав (admin, manager, viewer)
  • Хеширование паролей через password_hash() (bcrypt)

Защита данных

  • SQL-инъекции — PDO с подготовленными запросами
  • XSS — экранирование вывода (htmlspecialchars)
  • CSRF — токены в формах
  • Сессии — безопасные cookie (HttpOnly, Secure)

Логирование

  • activity_logs — все действия пользователей
  • notification_log — история отправки уведомлений
  • Хранятся IP-адреса, User Agent, время

📦 Ключевые компоненты

Mailer (src/Core/Mailer.php)

  • Отправка email через SMTP
  • Поддержка HTML-шаблонов
  • Логирование отправок

Notifier (src/Core/Notifier.php)

  • Уведомления по email и Telegram
  • Поддержка нескольких получателей
  • Очередь отправок

Settings (src/Core/Settings.php)

  • Работа с настройками системы
  • Кеширование для быстрого доступа
  • Поддержка разных типов данных (string, int, boolean, json)

Database (src/Database.php)

  • PDO-обёртка для работы с БД
  • Подготовленные запросы
  • Поддержка транзакций

🔄 Жизненный цикл запроса

  1. Пользователь → URL (например, /admin/orders.php)
  2. index.php → загружает конфигурацию
  3. Контроллер (orders.php) → обрабатывает запрос
  4. Валидация данных → проверка прав (permissions)
  5. Работа с Models → получение/сохранение данных
  6. Рендеринг View → возврат HTML
  7. Логирование → запись в activity_logs
📄 Технологии

🛠 Технологический стек

Компонент Технология
Язык PHP 8.x
База данных MySQL/MariaDB (PDO)
Фронтенд HTML5, CSS3, JavaScript (Vanilla)
Автозагрузка Composer (PSR-4)
Шаблоны PHP (без сторонних движков)
Сессии PHP native
Хеширование bcrypt (password_hash)
Email SMTP (через PHPMailer)
Логи MySQL (activity_logs, notification_log)
Кеширование Встроенное в Settings

📊 Диаграмма слоёв

┌─────────────────────────────────────────────────┐
│ Представление (View) │
│ public/admin/.php │
└──────────────────────┬──────────────────────────┘

┌──────────────────────▼──────────────────────────┐
│ Контроллеры │
│ public/admin/
.php │
└──────────────────────┬──────────────────────────┘

┌──────────────────────▼──────────────────────────┐
│ Сервисы (Services) │
│ src/Services/.php │
└──────────────────────┬──────────────────────────┘

┌──────────────────────▼──────────────────────────┐
│ Модели (Models) │
│ src/Models/
.php │
└──────────────────────┬──────────────────────────┘

┌──────────────────────▼──────────────────────────┐
│ Ядро (Core) │
│ src/Core/*.php │
└──────────────────────┬──────────────────────────┘

┌──────────────────────▼──────────────────────────┐
│ База данных │
│ MySQL/MariaDB │
└─────────────────────────────────────────────────┘

📄 Функционал

🔧 Расширение функционала

Чтобы добавить новую фичу:

  1. Создать модель в src/Models/
  2. Создать контроллер в public/admin/
  3. Добавить шаблон (если нужен)
  4. Обновить права доступа (если нужно)
  5. Добавить настройки (если нужно)

📝 Пример: добавление новой сущности "Проекты"

  1. src/Models/Project.php — модель
  2. public/admin/projects.php — контроллер
  3. public/admin/assets/js/projects.js — JS (если нужен)
  4. INSERT INTO permissions ... — добавить права
  5. INSERT INTO settings ... — добавить настройки

🔗 Связанные разделы