gpt4 book ai didi

laravel - 特征 SendsPasswordResetEmails 中的broker()函数如何返回\Illuminate\Contracts\Auth\PasswordBroker?

转载 作者:行者123 更新时间:2023-12-02 11:19:24 26 4
gpt4 key购买 nike

我使用的是 Laravel 5.3,在忘记密码 Controller 中,有 Trait SendsPasswordResetEmails

如果你查看它的定义,有一个名为 broker() 的函数,它返回 contract类型 \Illuminate\Contracts\Auth\PasswordBroker

如果您转到\Illuminate\Contracts\Auth\PasswordBroker ,没有名称为 broker() 的函数声明

甚至在它的派生类中也不存在 \Illuminate\Auth\Passwords\PasswordBroker.php

我看到它出现在\Illuminate\Auth\Passwords\PasswordBrokerManager.php

问题:您能告诉我怎么做吗broker()函数位于 trait SendsPasswordResetEmails返回\Illuminate\Contracts\Auth\PasswordBroker

最佳答案

Password 外观返回 Illuminate\Auth\Passwords\PasswordBrokerManager 的实例。

PasswordBrokerManager 中,有一个名为broker 的方法。 broker 方法随后返回 PasswordBroker 的实例。

基本上是这样的:

Password::broker();

只是另一种写法:

$manager = new PasswordBrokerManager();
return $manager->broker();

您返回的是该方法的结果,而不是方法本身。

Facade 的工作方式(简而言之)。

Facades 为您提供了一种无需new 即可获取类的方法(它们还有一些其他好处,但我们不需要详细介绍它们)。你会注意到,你总是会静态地调用 Facade 中的方法,这是因为 Facade 中有一个名为 __callStatic 的神奇方法,如果没有,就会调用该方法。该类中没有具有该名称的方法(并且该方法是静态调用的)。然后使用 getFacadeRoot 和 getFacadeAccessor 方法来找出实际要调用的内容。然后,它获取该调用的一个实例并在其上调用此方法(在此示例中为 broker)。

如果您转到Illuminate\Auth\Passwords\PasswordResetServiceProvider,您会看到:

 $this->app->singleton('auth.password', function ($app) {
return new PasswordBrokerManager($app);
});

以上内容告诉 Laravelauth.password 注册为实例 PasswordBrokerManager。然后在 Password Facade 类中您将看到:

protected static function getFacadeAccessor()
{
return 'auth.password';
}

希望这有帮助!

关于laravel - 特征 SendsPasswordResetEmails 中的broker()函数如何返回\Illuminate\Contracts\Auth\PasswordBroker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com