сооветсвенно из-за этого не могу обычном способом инжектить этот сервис в других классах через конструктор, т.к. лара не понимает откуда брать токен. Пока что делаю так:
resolve(Service::class, ['accessToken' => $accessToken]);
Мб кто подскажет может есть способ поудобнее да покрасивше?
можешь это в сервис провайдере настроить, вот пример https://laravel.com/docs/10.x/container#binding-basics
Вы скинули ссылку как, собственно, создавать сервисный класс со стороны сервис контейнера, у меня в принципе и сейчас нормально создается. Токен передается в конструктор, всё ок, сервис создается нормально. Меня интересует именно с клиентской точки зрения, как мне этот сервис нормально инжектить? Т.е. условно есть другой класс который хочет воспользоваться этим сервисом. Как ему его получить? Параметром в конструкторе нельзя т.к. не откуда будет взять токен. Сейчас единственный вариант который я вижу это: SomeClass { private readonly IService $service; public function __construct() { $this->service = resolve(IService::class, ['accessToken' => $accessToken]); } } В принципе вот как я написал сейчас работает, но имхо не люблю юзать всякие хелперы лары в сервисном слое, поэтому ищу другой способ.
не совсем так. По ссылке пример как научить сервис контейнер создавать нужный класс. После этого можно будет инжектить этот класс в любое место.
Нет. Параметром в конструкторе. не откуда будет взять токен для этого как раз нужно настроить создание сервиса
Т.е. по вашему если я добавлю пример который вы скинули в провайдер, то такой код будет работать?: ExampleController { public function __construct( private readonly IService $service; ) {} }
Обсуждают сегодня