我想我对守卫的作用有一个大概的了解。出于某种原因,网上没有太多关于它的文章。我在某些中间件中看到了这行代码
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
我不明白它的作用。我知道有两种类型的内置卫兵 - 网络和api和网络是默认的守卫。构造中的“Guard”有什么作用?以及$ auth变量如何发挥作用?
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或辅助函数。没有比这更多的了。