【问题标题】:Can someone explain what this code does in laravel有人可以解释一下这段代码在 laravel 中的作用吗
【发布时间】:2019-09-17 07:47:17
【问题描述】:

我想我对警卫的工作有一个粗略的了解。出于某种原因,网上并没有太多关于它的文章。我在某人的中间件中看到了这行代码

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

我不明白它的作用。我知道有两种类型的内置警卫-web 和 api 和 web 是默认警卫。构造内部的“守卫”是做什么的? $auth 变量是如何发挥作用的?

这是完整代码的图片

【问题讨论】:

  • 抱歉,我会投票赞成关闭这个问题,因为它太宽泛了。代码 sn-p 只包含一个基本的构造函数,它将初始化期间传入的任何保护分配为存储在类变量中,因此以后可以由类中的任何函数访问它。这并不特定于 Laravel、中间件或 Guards。您可能需要查找依赖倒置/注入。
  • 抱歉..我添加了完整代码的图片。请再次检查
  • 它被称为服务注入,您可以在 laravel.com/docs 的文档中阅读到很多相关信息。

标签: php laravel authentication middleware


【解决方案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 或辅助函数。仅此而已。

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多