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