Перейти к содержимому

AttributesLoader

Класс AttributesLoader предназначен для автоматизации работы с контроллерами. Он позволяет регистрировать классы вручную, сканировать целые директории и настраивать внедрение зависимостей (DI) через легкую фабрику.

Экземпляр этого класса получается через метод $bot->attributes().

Методы класса

scanDirectory

Автоматически находит все PHP-классы в указанной папке (рекурсивно) и регистрирует их как контроллеры.

#НазваниеТипОписание
1directorystringАбсолютный путь к папке с контроллерами (например, __DIR__ . '/src/Controllers').
2rootNamespacestringПространство имен (Namespace), соответствующее этой папке (например, App\Controllers).

Кэширование

При включенном кэше ($bot->setCache(...)) сканирование диска происходит только один раз. В дальнейшем список классов берется из кэша, что обеспечивает высокую производительность.

php
$bot->attributes()->scanDirectory(__DIR__ . '/src/Controllers', 'App\Controllers');

registerControllers

Регистрирует массив классов вручную. Полезно для небольших ботов или сложной модульной структуры.

#НазваниеТипОписание
1controllersarrayМассив строк с полными именами классов (FQCN).
php
use App\Controllers\MainController;
use App\Controllers\AdminController;

$bot->attributes()->registerControllers([
    MainController::class,
    AdminController::class
]);

setFactory

Устанавливает пользовательскую фабрику для создания экземпляров контроллеров. Это позволяет внедрять зависимости (Database, Logger, Config) в конструкторы ваших контроллеров без использования тяжелых DI-контейнеров.

#НазваниеТипОписание
1factorycallableФункция, принимающая имя класса (string) и возвращающая объект или null.

Логика работы:

  1. Библиотека вызывает вашу фабрику, передавая имя класса.
  2. Если вы вернули объект — используется он.
  3. Если вы вернули null (ветка default) — библиотека попытается создать класс сама через new ClassName().
php
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

Опубликовано под лицензией MIT.