В проектах часто возникает ситуация: у тебя есть несколько реализаций одного сервиса — API, драйверы, разные способы работы с базой. Хочется менять их, не трогая основной код. Manager в Laravel как раз для этого.
Создание Manager
Создать свой Manager просто:
namespace App\Managers;
use Illuminate\Support\Manager;
class CustomManager extends Manager
{
// Здесь будут методы для управления драйверами
}
Тут мы расширяем базовый Illuminate\Support\Manager и получаем доступ ко всем базовым методам работы с драйверами.
Регистрация Manager
Чтобы Laravel знал о твоем Manager, регистрируем его в контейнере сервисов, например в AppServiceProvider:
$this->app->singleton('custom.manager', function ($app) {
return new \App\Managers\CustomManager($app);
});
Теперь app('custom.manager') будет возвращать один и тот же экземпляр, готовый к использованию.
Использование Manager
В Manager обычно есть метод driver, который возвращает нужную реализацию сервиса:
public function driver($driver = null)
{
$driver = $driver ?: $this->getDefaultDriver();
return $this->createDriver($driver);
}
protected function createDriver($driver)
{
// Создаем конкретный сервис по имени драйвера
}
Пример использования:
$apiService = app('custom.manager')->driver('api_service_name');
Теперь можно легко переключаться между разными API или реализациями, не трогая основной код.
Расширение Manager
Manager можно прокачать:
- Кэшировать созданные сервисы, чтобы не создавать каждый раз новый экземпляр.
- Автоматически выбирать драйвер по конфигурации.
- Добавлять свои методы для логики, специфичной для твоего приложения.
Это делает Manager настоящим комбайном для управления сервисами.
Заключение
Manager в Laravel — это простой способ держать сервисы под контролем и не превращать проект в спагетти. Используя драйверы и централизованное управление зависимостями, можно менять реализации без боли. Если правильно его настроить, код становится чистым, гибким и поддерживаемым.
0 комментариев