Есть следующий класс работы с ВК (там несколько нужных API):
class UserApi implements UserApiContract
{
private $user_id;
private $access_token;
private $client;
/**
* UserApi constructor.
*/
public function __construct()
{
$this->client = new Client();
}
public function setUserId(string $user_id)
{
$this->user_id = $user_id;
}
public function setAccessToken(string $token)
{
$this->access_token = $token;
}
}
Задача состоит в том, чтобы задать свойства access_token
и user_id
один раз для всего приложения. Эти данные получаются в функции Auth
стороннего класса (самописная простая аутентификация через ВК, просто получается user_id
и access_token
, создается модель, затем делается Auth::login()
).
Для этих целей я пробую использовать сервис-контейнер таким образом. После получения этих параметров в процедуре Auth
я кладу уже настроенные инстанс в сервис контейнер
$res=getData();
$vk = new UserApi();
$vk->setAccessToken($res['access_token']);
$vk->setUserId($res['user_id']);
app()->instance(UserApiContract::class, $vk);
В самом классе аутентификации это инстанс доступен без всяких проблем. Но вот когда я пытаются подсунуть его контроллеру:
class DashController extends Controller
{
private $vk;
public function __construct(UserApiContract $vk)
{
$this->vk=$vk;
}
}
То при обращении к контроллеру ловлю эксепшн: [UserApiContract] is not instantiable
. Дамп сервис контейнера показывает, что ранее положенного инстанса там нет. Мне кажется, что я все же не до конца понял принцип работы IoC. Может надо вручную передавать сервис-контейнер в каждый класс? Если нет, то как лучше сделать глобально доступный инстанс с уже настроенными свойствами?
P.S. Если я делаю биндинг в сервис-провайдере, то инстанс доступен везде, но соответственно свойства user_api
и access_token
- null
, т.к процедура аутентификации вызвается позже метода register в сервис провайдере.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть код его нужно запустить по расписанию но как это сделать я не знаю, в БД и записано время старта акции - но она не стартует в чем может...
Мне нужно, чтобы после того, как пользователь начал чат с ботом, ему отправлялся его chatID