如何在trands SendsPasswordResetEmails中的broker()函数返回\ Illuminate\Contracts\Auth\PasswordBroker?

Pan*_*kaj 2 laravel laravel-5.1 laravel-5.2 laravel-5.3

我正在使用Laravel 5.3,在Forgot Password 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

Rwd*_*Rwd 6

Password门面返回的一个实例Illuminate\Auth\Passwords\PasswordBrokerManager.

在其中PasswordBrokerManager有一个叫做的方法broker.这是该方法broker是然后返回的一个实例PasswordBroker.

基本上,这个:

Password::broker();
Run Code Online (Sandbox Code Playgroud)

只是另一种写作方式:

$manager = new PasswordBrokerManager();
return $manager->broker();
Run Code Online (Sandbox Code Playgroud)

您将返回该方法的结果而不是方法本身.

Facades工作方式(简而言之).

外墙为您提供了一种无需支付课程的方式new(它们还有一些其他好处,但我们不需要进入它们).您会注意到,您将始终静态地从Facade调用方法,这是因为如果该类中没有具有该名称的方法(并且该方法被静态magic method调用)__callStatic,则会调用外观中的一个调用).然后使用getFacadeRootgetFacadeAccessor方法找出实际上要调用的内容.然后它获取该调用的实例并在其上调用此方法(在此示例中broker).

如果你去,Illuminate\Auth\Passwords\PasswordResetServiceProvider你会看到:

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

以上是告诉Laravel注册auth.password为实例PasswordBrokerManager.然后在PasswordFacade类中你会看到:

protected static function getFacadeAccessor()
{
    return 'auth.password';
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!