Как привязать аутентифицированного пользователя к параметру в контроллере? - PullRequest
2 голосов
/ 12 мая 2019

Я не могу получить аутентифицированного веб-мастера в контроллере. Как вы можете видеть ниже, я аутентифицирую пользователя в конструкторе через $this->middleware:

class DomainController 
.....
 public function __construct()
    {
        $this->middleware('auth:webmasters');
    }
    public function requestNewName(Request $request, Webmaster $webmaster, DomainRepositoryInterface $domainRepository): array
    {
        // $webmaster->id === null here
        /** @var Webmaster $webmaster */
        $webmaster = Auth::user(); // $webmaster->id === 1, all OK
        $domainRepository->requestChangeName($webmaster, $request->input('newName', ''));
        return ['result' => true];
    }
....

Я думаю, мне нужно где-то связать, но я не понимаю, где и как?

P. S.

Теперь у меня есть в AuthServiceProvider:

    foreach ([Webmaster::class, Admin::class] as $class) {
        $this->app->bind($class, static function($app) use ($class) {
            $authenticated = Auth::user();
            /** @noinspection GetClassUsageInspection */
            return $authenticated && get_class($authenticated) === $class ? $authenticated : null;
        });
    }
}

И вызвать эту функцию в методе загрузки. Могу поспорить, что в Laravel есть что-то для этого.

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Вы хотите, чтобы веб-мастер внедрялся в ваш метод путем внедрения зависимостей laravel.

То, как вы можете это сделать, - через Service Container, то есть парень, который обрабатывает инъекции. Когда вы, как веб-мастер $ webmaster, ищите привязку с этим типом, поскольку вы не сделали явную привязку, она все равно пытается дать вам экземпляр, но это общий тип.

Все, что вам нужно сделать, это добавить этот код у вашего поставщика услуг:

$this->app->bind('App\Webmaster', function ($app) {
   return Auth::user();
});

Теперь laravel знает, как вы хотите, чтобы веб-мастер внедрялся в функцию.

0 голосов
/ 12 мая 2019

Это должен быть комментарий, но у меня недостаточно репутации. Ваш код выглядит нормально для меня. Но одна вещь приходит на ум.

Поскольку $webmaster->id дает нулевое значение, это означает, что класс Webmaster правильно импортирован в DomainController. Но, возможно, вы неправильно импортировали класс Webmaster в AuthServiceProvider. Также возможно dd(get_class($webmaster)); поможет. Что же все-таки возвращает Auth::user() в вашем приложении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...