Laravel: определение шлюза с использованием отложенного поставщика услуг
Я знаю, что это старый пост. Но у меня возникла проблема с использованием этого отложенного поставщика услуг для определения ворот.
Я использую 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" будет использоваться для определения Gates.
public function handle($request, Closure $next)
{
$request->attributes->add(['foo' => 'bar']);
// Here I load gates
$myImpl = app(MyImplementation::class);
$myImpl ->loadGates();
return $next($request);
}
Моя служба: определение ворот. Для тестирования я просто возвращаю "истина", но никогда не попадаю в 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().
Мне что-то здесь не хватает, пожалуйста?
Благодарность