Архитектура
Обновлено: 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-обёртка для работы с БД
- Подготовленные запросы
- Поддержка транзакций
🔄 Жизненный цикл запроса
- Пользователь → URL (например, /admin/orders.php)
- index.php → загружает конфигурацию
- Контроллер (orders.php) → обрабатывает запрос
- Валидация данных → проверка прав (permissions)
- Работа с Models → получение/сохранение данных
- Рендеринг View → возврат HTML
- Логирование → запись в activity_logs
🛠 Технологический стек
| Компонент | Технология |
|---|---|
| Язык | PHP 8.x |
| База данных | MySQL/MariaDB (PDO) |
| Фронтенд | HTML5, CSS3, JavaScript (Vanilla) |
| Автозагрузка | Composer (PSR-4) |
| Шаблоны | PHP (без сторонних движков) |
| Сессии | PHP native |
| Хеширование | bcrypt (password_hash) |
| 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 │
└─────────────────────────────────────────────────┘
🔧 Расширение функционала
Чтобы добавить новую фичу:
- Создать модель в
src/Models/ - Создать контроллер в
public/admin/ - Добавить шаблон (если нужен)
- Обновить права доступа (если нужно)
- Добавить настройки (если нужно)
📝 Пример: добавление новой сущности "Проекты"
src/Models/Project.php— модельpublic/admin/projects.php— контроллерpublic/admin/assets/js/projects.js— JS (если нужен)INSERT INTO permissions ...— добавить праваINSERT INTO settings ...— добавить настройки