Попытка получить отложенный сервис из IoC у другого поставщика услуг не удалась.
class ServiceProvider extends \Illuminate\Support\ServiceProvider {
// ...
public function register() {
$router = \App::make('router'); // gets resolved
$hash = \App::make('hash'); // throws an error (Class hash does not exists)
}
// ...
}
изменения $deffered = false
в true
в HashingServiceProvider
решает эту проблему.
Что я делаю неправильно?
Если вы полагаетесь на другого поставщика услуг, сделайте это в boot
метод:
class ServiceProvider extends \Illuminate\Support\ServiceProvider {
public function boot ()
{
$hash = $this->app['hash'];
}
}
Вот цитата из документы:
register
метод вызывается сразу же, когда поставщик услуг зарегистрирован, аboot
Команда вызывается только перед отправкой запроса. Таким образом, если действия вашего поставщика услуг основаны на том, что другой поставщик услуг уже зарегистрирован, или вы переопределяете службы, связанные с другим поставщиком, вам следует использоватьboot
метод.
Других решений пока нет …