Triangle Engine

triangle/engine — это ядро Triangle Framework, предоставляющее базовую функциональность для всех компонентов и приложений.

Установка

composer require triangle/engine

Основные компоненты

App

Абстрактный класс приложения, наследующийся от localzet\ServerAbstract.

<?php

namespace App;

use Triangle\Engine\App as EngineApp;

class App extends EngineApp
{
    // Переопределите методы для настройки приложения
}

Container

Контейнер зависимостей (DI Container) для управления зависимостями приложения.

use Triangle\Engine\Container;

// Регистрация сервиса
Container::set('service', function() {
    return new MyService();
});

// Получение сервиса
$service = Container::get('service');

// Проверка существования
if (Container::has('service')) {
    // ...
}

Config

Система конфигурации для работы с настройками приложения.

Загрузка конфигурации:

  • Конфигурационные файлы из config/ загружаются автоматически при старте
  • Файлы должны возвращать массивы через return [...]
  • Исключение: config/route.php — это исполняемый код, не конфигурация
use Triangle\Engine\Config;

// Получение значения
$value = Config::get('app.name');

// Получение с значением по умолчанию
$value = Config::get('app.debug', false);

// Установка значения
Config::set('app.name', 'My App');

// Перезагрузка конфигурации
Config::reload();

// Вспомогательная функция
config('app.name');

Структура конфигурации:

Конфигурационные файлы объединяются в единое дерево:

  • config/app.phpconfig('app.name')
  • config/database.phpconfig('database.default')
  • config/middleware.phpconfig('middleware.')

Request & Response

Классы для работы с запросами и ответами.

use Triangle\Engine\Request;
use Triangle\Engine\Response;

// Работа с запросом
$request = Request::current();

// Получение данных запроса
$input = $request->input('key');
$header = $request->header('Content-Type');
$method = $request->method();
$path = $request->path();

// Работа с ответом
Response::success($data);
Response::error($message, $code);
Response::json($data);

Exception Handling

Система обработки исключений.

use Triangle\Exception\NotFoundException;
use Triangle\Exception\BusinessException;

// Выброс исключений
throw new NotFoundException('Resource not found');
throw new BusinessException('Business logic error');

// Кастомный обработчик исключений
use Triangle\Exception\ExceptionHandlerInterface;

class MyExceptionHandler implements ExceptionHandlerInterface
{
    public function handle($exception)
    {
        // Обработка исключения
    }
}

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

app/
├── controller/     # Контроллеры
├── middleware/     # Middleware
├── model/          # Модели
└── view/           # Представления

config/             # Файлы конфигурации
├── app.php         # Настройки приложения (return array)
├── route.php       # Маршруты (исполняемый PHP код)
├── middleware.php  # Middleware (return array)
├── database.php    # База данных (return array)
└── ...

public/             # Публичная директория

runtime/            # Временные файлы
├── logs/           # Логи
├── sessions/       # Сессии
└── views/          # Скомпилированные представления

Автозагрузка

Система автозагрузки автоматически загружает классы из компонентов и плагинов:

use Triangle\Engine\Autoload;

// Запуск автозагрузки
Autoload::start();

Автозагрузка включает:

  • Автозагрузку классов через Composer
  • Загрузку файлов из autoload/ директории
  • Инициализацию компонентов

Bootstrap

Система инициализации компонентов:

use Triangle\Engine\Bootstrap;

// Запуск bootstrap
Bootstrap::start();

Компоненты автоматически регистрируются через свои классы Bootstrap:

  • Triangle\Router\Bootstrap
  • Triangle\Middleware\Bootstrap
  • Triangle\Database\Bootstrap
  • И другие...

Плагины

Установка плагина

Плагины устанавливаются автоматически при установке через Composer:

composer require vendor/plugin-name

Управление плагинами

use Triangle\Engine\Plugin;

// Получение конфигурации плагина
$config = Plugin::getPluginConfig('plugin-name');

// Проверка установки
if (Plugin::isInstalled('plugin-name')) {
    // ...
}

Вспомогательные функции

Engine предоставляет множество вспомогательных функций:

// Пути
base_path();        // Корневая директория
app_path();         // Директория приложения
config_path();      // Директория конфигурации
public_path();      // Публичная директория
runtime_path();     // Директория временных файлов
plugin_path();      // Директория плагинов

// Конфигурация
config('key');      // Получение значения конфигурации

// Логирование
Log::info('message');
Log::warning('message');
Log::error('message');

// Кэширование
Cache::get('key');
Cache::set('key', 'value');
Cache::delete('key');

// Ответы
response('text');           // Текстовый ответ
response()->json($data);    // JSON ответ
redirect('/path');          // Редирект

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

Основные файлы конфигурации:

  • config/app.php — настройки приложения
  • config/bootstrap.php — классы для инициализации
  • config/container.php — настройки контейнера зависимостей
  • config/log.php — настройки логирования
  • config/route.phpисполняемый код для регистрации маршрутов (не конфигурация!)

Важные отличия конфигурационных файлов

  1. Большинство файлов (app.php, database.php, middleware.php и т.д.) — это конфигурационные файлы, которые возвращают массивы через return [...].

  2. route.php — это исключение! Это исполняемый PHP-код, который подключается через require_once и содержит прямые вызовы Router::get(), Router::post() и т.д.

Это различие важно понимать при работе с фреймворком.