Поставщики услуг Laravel отказались от загрузки - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть поставщик услуг, регистрирующий авторизационные ворота, считанные из базы данных, например ...

class PermissionServiceProvider extends ServiceProvider
{
  // ...

  public function boot()
  {
    Permission::get()->map(function($permission) {
      Gate::define($permission->slug, function($user) use ($permission) {
        return $user->hasPermission($permission);
      });
    });
  }

  // ...
}

И я зарегистрировал это в config/app.php

return [

  // ...

  $providers = [
    // ...
    App\Providers\PermissionServiceProvider::class,
  ],

];

Проблема:

Тесты не будут выполняться, поскольку этот поставщик услуг вызывался до настройки подключения к базе данных.

Решение:

Defer загрузка поставщика услуг путем установки для свойства defer значения true.

class PermissionServiceProvider extends ServiceProvider
{
  // ...

  protected $defer = true;

  public function boot()
  {
    Permission::get()->map(function($permission) {
      Gate::define($permission->slug, function($user) use ($permission) {
        return $user->hasPermission($permission);
      });
    });
  }

  public function provides()
  {
    // Not sure of what to do with this yet...
  }

  // ...
}

Новый выпуск:

сервис-провайдеру никогда не звонят вообще.

Вопрос:

Как я могу отложить загрузку сервис-провайдера до тех пор, пока не убедитесь, что база данных настроена и доступна?

...