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?
该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,则会调用外观中的一个调用).然后使用getFacadeRoot和getFacadeAccessor方法找出实际上要调用的内容.然后它获取该调用的实例并在其上调用此方法(在此示例中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)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |