У меня есть поставщик услуг, регистрирующий авторизационные ворота, считанные из базы данных, например ...
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...
}
// ...
}
Новый выпуск:
сервис-провайдеру никогда не звонят вообще.
Вопрос:
Как я могу отложить загрузку сервис-провайдера до тех пор, пока не убедитесь, что база данных настроена и доступна?