AttributesLoader
Класс AttributesLoader предназначен для автоматизации работы с контроллерами. Он позволяет регистрировать классы вручную, сканировать целые директории и настраивать внедрение зависимостей (DI) через легкую фабрику.
Экземпляр этого класса получается через метод $bot->attributes().
Методы класса
scanDirectory
Автоматически находит все PHP-классы в указанной папке (рекурсивно) и регистрирует их как контроллеры.
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | directory | string | Абсолютный путь к папке с контроллерами (например, __DIR__ . '/src/Controllers'). |
| 2 | rootNamespace | string | Пространство имен (Namespace), соответствующее этой папке (например, App\Controllers). |
Кэширование
При включенном кэше ($bot->setCache(...)) сканирование диска происходит только один раз. В дальнейшем список классов берется из кэша, что обеспечивает высокую производительность.
$bot->attributes()->scanDirectory(__DIR__ . '/src/Controllers', 'App\Controllers');registerControllers
Регистрирует массив классов вручную. Полезно для небольших ботов или сложной модульной структуры.
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | controllers | array | Массив строк с полными именами классов (FQCN). |
use App\Controllers\MainController;
use App\Controllers\AdminController;
$bot->attributes()->registerControllers([
MainController::class,
AdminController::class
]);setFactory
Устанавливает пользовательскую фабрику для создания экземпляров контроллеров. Это позволяет внедрять зависимости (Database, Logger, Config) в конструкторы ваших контроллеров без использования тяжелых DI-контейнеров.
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | factory | callable | Функция, принимающая имя класса (string) и возвращающая объект или null. |
Логика работы:
- Библиотека вызывает вашу фабрику, передавая имя класса.
- Если вы вернули объект — используется он.
- Если вы вернули
null(веткаdefault) — библиотека попытается создать класс сама черезnew ClassName().
use App\Controllers\GameController;
$pdo = new PDO(...);
$bot->attributes()->setFactory(function(string $class) use ($pdo) {
return match($class) {
// Внедряем PDO в GameController
GameController::class => new $class($pdo),
// Остальные классы создадутся автоматически
default => null
};
});Список атрибутов
Все атрибуты описаны в файле Attribute