Архитектура Triangle Framework
Triangle Framework — это модульный высокопроизводительный PHP-фреймворк, построенный на основе Localzet Server. Фреймворк разработан для замены традиционной архитектуры PHP-FPM и предназначен для разработки веб-приложений, HTTP-интерфейсов и микросервисов.
Общая структура
Triangle Framework состоит из следующих основных компонентов:
Ядро (Engine)
triangle/engine — это базовое ядро фреймворка, которое предоставляет:
- Абстракцию приложения (
Triangle\Engine\App) - Контейнер зависимостей (
Triangle\Engine\Container) - Систему конфигурации (
Triangle\Engine\Config) - Обработку запросов и ответов (
Triangle\Engine\Request,Triangle\Engine\Response) - Систему исключений и обработчиков ошибок
- Поддержку плагинов и автозагрузки
- Вспомогательные функции (кэширование, логирование, переводы)
Компоненты (Components)
Модульные библиотеки, расширяющие функциональность ядра:
triangle/console— консольные команды и CLI-инструментыtriangle/router— система маршрутизацииtriangle/middleware— промежуточное ПО (middleware)triangle/database— работа с базами данных (на основе Illuminate Database)triangle/view— система шаблонизацииtriangle/session— управление сессиямиtriangle/events— система событийtriangle/cron— планировщик задач
Движки (Engines)
Слои приложений, построенные на основе Engine:
triangle/engine-http— HTTP-слой для обработки HTTP-запросовtriangle/engine-ws— WebSocket-слой для работы с WebSocket-соединениями
Важно: Движки engine-http и engine-ws являются взаимоисключающими (не могут использоваться одновременно).
Плагины (Plugins)
Дополнительные модули расширения:
triangle/oauth— OAuth-аутентификация с поддержкой множества провайдеровtriangle/media— обработка медиа-файловtriangle/pusher— система push-уведомленийtriangle/multiconnect— шлюз для множественных подключений
Фреймворки (Frameworks)
Готовые рабочие окружения:
triangle/web— полнофункциональный HTTP-фреймворк (MVC)triangle/ws— WebSocket-фреймворк для real-time приложений
Принцип модульности
Triangle Framework построен по принципу модульности:
- Независимость компонентов — каждый компонент может использоваться отдельно
- Единое ядро — все компоненты основаны на
triangle/engine - Гибкая конфигурация — система конфигурации позволяет настраивать каждый компонент отдельно
- Плагинная архитектура — легко расширяется через систему плагинов
Конфигурационные файлы
Конфигурационные файлы (с return)
Большинство файлов в папке config/ — это конфигурационные файлы, возвращающие массивы настроек:
<?php
// config/app.php
return [
'debug' => true,
'name' => 'My App',
];
// config/database.php
return [
'default' => 'mysql',
'connections' => [...],
];
// config/middleware.php
return [
'' => [
\App\Middleware\CorsMiddleware::class,
],
];
Эти файлы загружаются через Triangle\Engine\Config::load() и доступны через функцию config('key').
Исполняемые файлы (без return)
Исключение: config/route.php — это не конфигурационный файл, а выполняемый PHP-код:
<?php
// config/route.php
use Triangle\Router;
Router::get('/', [Controller::class, 'index']);
Router::post('/api/users', [ApiController::class, 'store']);
Этот файл подключается через require_once при инициализации Router и позволяет напрямую вызывать методы регистрации маршрутов.
Жизненный цикл приложения
1. Запуск сервера (Localzet Server)
↓
2. Инициализация Engine (Triangle\Engine\App)
↓
3. Загрузка конфигурации (Triangle\Engine\Config::loadAll())
↓
4. Автозагрузка компонентов (Triangle\Engine\Autoload)
↓
5. Bootstrap компонентов (Triangle\Engine\Bootstrap::start())
↓
6. Загрузка маршрутов (Router::collect() → require route.php)
↓
7. Обработка запросов через middleware
↓
8. Выполнение контроллеров или обработчиков
↓
9. Генерация ответа
Обработка запросов
HTTP-запросы (triangle/engine-http)
- Получение HTTP-запроса
- Поиск статического файла (если включено)
- Диспетчеризация маршрута через Router
- Применение middleware (глобальные → маршрутные → контроллерные)
- Выполнение обработчика маршрута
- Обработка ответа middleware (в обратном порядке)
- Отправка HTTP-ответа
Автоматическая маршрутизация
Triangle поддерживает автоматическую маршрутизацию на основе структуры контроллеров:
/app/controller/UserController::index → GET /user/index
/app/controller/UserController::show → GET /user/show
Автоматические маршруты можно отключить через аннотацию #[DisableDefaultRoute].
Преимущества архитектуры
- Производительность — основан на Localzet Server, работает без PHP-FPM
- Модульность — используйте только нужные компоненты
- Расширяемость — легко добавлять плагины и компоненты
- Масштабируемость — поддержка микросервисов и распределенных систем
- Современный PHP — требует PHP 8.1+, использует современные возможности языка