провайдере пишу $this->app->bind(ServiceInterface::class, FooService::class);
Далее я прокидываю, например, в конструктор контроллера этот интерфейс. И всё работает как надо. НО что делать, если мне нужно изменить привязку, например, в middleware? Я пишу в middleware $this->app->bind(ServiceInterface::class, BarService::class);
и теперь в контроллере в get_class($this->service) я ожидаю увидеть BarService, но получаю FooService.
при этом при get_class(app(ServiceInterface::class)) всё норм и там BarService.
Есть ли возможность вызвать перепривязку как то?
конструктор контроллера вызывается раньше мидлваров.
и касательно того что ты сделать пытаешься: https://dev.to/kyam/laravel-how-to-bind-an-interface-based-on-request-parameters-dp5
Но это немного странно, как по мне
ну так жизненный цикл устроен. в конструкторе контроллера можно указывать мидлвары. создается экземпляр. потом вызывается цепочка мидлов, потом метод у объекта контроллера. в целом классика.
Ну не классика уж точно. В том же дотнете вызов контроллера идет после миддлвар
Обсуждают сегодня