Как привязать аутентифицированного пользователя к параметру в контроллере?

Я не могу получить аутентифицированный веб-мастер в контроллере. Как вы можете видеть ниже, я аутентифицирую пользователя в конструкторе через $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];
    }
....

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

П. С.

Теперь у меня есть в 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 есть что-то для этого.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

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

Но где лучше всего это сделать? И как не дать мне универсальную модель?

Tymur Valiiev 12.05.2019 20:07

Вы помещаете этот код в свой AppServiceProvider, и он всегда будет давать вам аутентифицированного веб-мастера, если его нет, я не знаю, даст ли он вам нуль или исключение

Magus 12.05.2019 20:22

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

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

$webmaster->id должен дать мне идентификатор (1,2,3,....). С кодом в конце моего вопроса все работает нормально.
Tymur Valiiev 13.05.2019 08:29

Я знаю, что Вы имеете ввиду. Как я уже сказал, проверьте, правильно ли импортирован класс Webmaster. А для отладки сделайте dd(get_class($webmaster)); в действии requestNewName.

Uroš Anđelić 14.05.2019 23:48

С кодом в конце он дает мне правильную сущность. Без этого дает мне пустую сущность. Webmaster класс в обоих случаях

Tymur Valiiev 16.05.2019 10:03

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