Laravel服务提供商推迟加载

时间:2018-12-05 14:16:40

标签: php laravel dependency-injection deferred

我有一个服务提供商注册从数据库读取的授权门,例如...

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...
  }

  // ...
}

新问题:

服务提供商根本不会接到电话。

问题:

在确定数据库已设置且可访问之前,如何推迟加载服务提供商?

0 个答案:

没有答案