有人可以解释这段代码在laravel中做什么

时间:2019-04-28 13:10:52

标签: php laravel authentication middleware

我认为我对后卫的工作有一个粗略的了解。由于某种原因,在线上并没有太多的文字记载。我在某人的中间件中看到了这一行代码

public function __construct(Guard $auth)
{
    $this->auth = $auth;
}

,我不明白它的作用。我了解内置警卫有两种类型:Web和api,而Web是默认警卫。构造内部的“ Guard”有什么作用?以及$ auth变量如何起作用?。

这是完整代码的图片enter image description here

1 个答案:

答案 0 :(得分:1)

Guard类用于身份验证,即登录用户,检查是否有经过身份验证的用户,检索经过身份验证的用户,将其注销等。

我想说的(访问文档和各种教程)最常见的方法是使用Auth Facadeauth()辅助函数。无论采用哪种方法,您都可以使用相同的方法,例如

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函数。没有比这更多的东西了。