我无法在控制器中检索经过身份验证的网站管理员。如下所示,我通过$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。
现在我在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可以满足要求。
答案 0 :(得分:0)
您希望通过laravel的依赖项注入将网站管理员注入到您的方法中。
执行此操作的方法是通过服务容器,该服务容器负责处理注射。当您使用Webmaster $ webmaster时,它会查找具有该类型的绑定,因为您尚未执行显式绑定,因此无论如何它都会尝试为您提供一个实例,但这只是一个通用实例。
您要做的就是在您的服务提供商中添加以下代码:
$this->app->bind('App\Webmaster', function ($app) {
return Auth::user();
});
现在laravel知道您希望如何将网站站长注入该功能。
答案 1 :(得分:0)
这应该是一条评论,但我的声誉不足。您的代码对我来说还不错。但我想到一件事。
由于$webmaster->id
为您提供了空值,因此意味着Webmaster
类已正确导入到DomainController
中。但是,也许您没有正确地将Webmaster
类导入到AuthServiceProvider
中。也可能dd(get_class($webmaster));
会有所帮助。无论如何,Auth::user()
会在您的应用程序中返回什么?