我有一个服务提供商注册从数据库读取的授权门,例如...
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...
}
// ...
}
新问题:
服务提供商根本不会接到电话。
问题:
在确定数据库已设置且可访问之前,如何推迟加载服务提供商?