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






Вы хотите, чтобы веб-мастер был внедрен в ваш метод путем внедрения зависимостей laravel.
Это можно сделать через сервисный контейнер, который занимается инъекциями. Когда вы как веб-мастер $webmaster, он ищет привязку с этим типом, поскольку вы не сделали явную привязку, он все равно пытается дать вам экземпляр, но это общий.
Все, что вам нужно сделать, это добавить этот код в вашего поставщика услуг:
$this->app->bind('App\Webmaster', function ($app) {
return Auth::user();
});
Теперь laravel знает, как вы хотите, чтобы веб-мастер был внедрен в функцию.
Вы помещаете этот код в свой AppServiceProvider, и он всегда будет давать вам аутентифицированного веб-мастера, если его нет, я не знаю, даст ли он вам нуль или исключение
Это должен быть комментарий, но у меня недостаточно репутации. Ваш код выглядит нормально для меня. Но одно приходит на ум.
Поскольку $webmaster->id дает вам null, это означает, что класс Webmaster правильно импортирован в DomainController. Но, возможно, вы неправильно импортировали класс Webmaster в AuthServiceProvider. Также, возможно, dd(get_class($webmaster)); поможет. Что вообще возвращает Auth::user() в вашем приложении?
$webmaster->id должен дать мне идентификатор (1,2,3,....). С кодом в конце моего вопроса все работает нормально.
Я знаю, что Вы имеете ввиду. Как я уже сказал, проверьте, правильно ли импортирован класс Webmaster. А для отладки сделайте dd(get_class($webmaster)); в действии requestNewName.
С кодом в конце он дает мне правильную сущность. Без этого дает мне пустую сущность. Webmaster класс в обоих случаях
Но где лучше всего это сделать? И как не дать мне универсальную модель?