Я знаю, что это старый пост. Но у меня возникла проблема с использованием этого отложенного поставщика услуг для определения шлюзов.
Я использую Laravel 5.8
Поставщик услуг : Я хочу отложить загрузку после определения "foo" (в промежуточном программном обеспечении).
class MyServiceProvider extends ServiceProvider implements DeferrableProvider
{
protected $defer = true;
public function register()
{
$this->app->bind('MyImplementation', function () {
$request = app(\Illuminate\Http\Request::class);
return app(MyImplementation::class, [$request->foo]);
}
}
public function provides()
{
return [MyImplementation::class];
}
}
Вот как я обращаюсь в промежуточном программном обеспечении (добавление «foo» и использование поставщика услуг). «foo» будет использоваться для определения Гейтса.
public function handle($request, Closure $next)
{
$request->attributes->add(['foo' => 'bar']);
// Here I load gates
$myImpl = app(MyImplementation::class);
$myImpl ->loadGates();
return $next($request);
}
Мой сервис : определение шлюза. Для тестирования я просто возвращаю «true», но никогда не попадаю в Gate :: define ().
class MyImplementation
{
public function loadGates()
{
//dd("Test 1"); // reach here
Gate::define('create-user', function ($user) {
dd("Test 2"); //never reach here
// "foo" will be used here to define Gates.
return true;
});
}
}
Мне интересно, почему я не вхожу в Gate :: define ().
Я что-то упускаю здесь, пожалуйста?
Спасибо