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().

Мне что-то здесь не хватает, пожалуйста?

Благодарность

0 ответов

Другие вопросы по тегам