我认为我对后卫的工作有一个粗略的了解。由于某种原因,在线上并没有太多的文字记载。我在某人的中间件中看到了这一行代码
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
,我不明白它的作用。我了解内置警卫有两种类型:Web和api,而Web是默认警卫。构造内部的“ Guard”有什么作用?以及$ auth变量如何起作用?。
答案 0 :(得分:1)
Guard
类用于身份验证,即登录用户,检查是否有经过身份验证的用户,检索经过身份验证的用户,将其注销等。
我想说的(访问文档和各种教程)最常见的方法是使用Auth
Facade或auth()辅助函数。无论采用哪种方法,您都可以使用相同的方法,例如
auth()->user()
或Auth::user()
将返回当前经过身份验证的用户。
auth()->id()
或Auth::id()
将返回当前经过身份验证的用户的id
。
auth()->check()
或Auth::check()
会告诉您当前用户是否已登录。
等
无论哪种情况(使用auth()->
或Auth::
),您都将访问Guard
类上的方法。
Laravel还具有称为Service Container的名称,这是使您能够拥有dependency injection的一种方法。从本质上讲,您可以在无需执行new ClassName()
之类的情况下自动获取类的实例。乍一看似乎没什么大不了的,但是如果您有一个需要向其构造函数传递不同变量和类的类,则可以在容器中进行设置,因此您不必担心。另一个好处是,您想使用一个类的相同实例,而不是每次都创建一个新实例,这也可以使用容器来完成。
现在,有些人更喜欢使用dependency injection而不是使用Facades或辅助函数(有关更多信息,请参见here)。对于您的示例中的案例,您正在注入Guard
类,以便可以将其作为类的属性来访问,而不是使用Facade或helper函数。没有比这更多的东西了。