broker() 如何在特征 SendsPasswordResetEmails return \Illuminate\Contracts\Auth\PasswordBroker 中发挥作用?
how broker() function in trait SendsPasswordResetEmails return \Illuminate\Contracts\Auth\PasswordBroker?
我正在使用Laravel 5.3,在忘记密码控制器中,有Trait SendsPasswordResetEmails
如果你去它的定义,有一个叫做 broker()
的函数,它 returns contract
类型 \Illuminate\Contracts\Auth\PasswordBroker
如果转到 \Illuminate\Contracts\Auth\PasswordBroker
,则没有名称为 broker()
的函数声明
甚至在它的派生中也没有 class \Illuminate\Auth\Passwords\PasswordBroker.php
我看到它出现在 \Illuminate\Auth\Passwords\PasswordBrokerManager.php
问题:请问broker()
如何在trait SendsPasswordResetEmails
return\Illuminate\Contracts\Auth\PasswordBroker
中发挥作用?
Password
外观 returns Illuminate\Auth\Passwords\PasswordBrokerManager
的实例。
在 PasswordBrokerManager
中有一个名为 broker
的方法。方法 broker
然后 returns 是 PasswordBroker
的一个实例。
基本上,这个:
Password::broker();
只是另一种写法:
$manager = new PasswordBrokerManager();
return $manager->broker();
您返回的是该方法的结果,而不是方法本身。
Facades
的工作方式(简而言之)。
Facades 为您提供了一种无需 new
即可获得 class 的方法(它们还有其他一些好处,但我们不需要深入探讨) .
您会注意到,您总是会从 Facade 静态调用方法,这是因为在名为 __callStatic
的 Facade 中有一个 magic method
,如果该 __callStatic
中没有方法,它将被调用 class 使用该名称(并且静态调用该方法)。
然后使用 getFacadeRoot
和 getFacadeAccessor
方法找出实际要调用的内容。然后它获取该调用的一个实例并在其上调用此方法(在此示例中 broker
)。
如果你去 Illuminate\Auth\Passwords\PasswordResetServiceProvider
你会看到:
$this->app->singleton('auth.password', function ($app) {
return new PasswordBrokerManager($app);
});
以上是告诉 Laravel
将 auth.password
注册为实例 PasswordBrokerManager
。然后在 Password
Facade class 你会看到:
protected static function getFacadeAccessor()
{
return 'auth.password';
}
希望对您有所帮助!
这是 SendsPasswordResetEmails
特征 中的方法 broker
:
/**
* Get the broker to be used during password reset.
*
* @return \Illuminate\Contracts\Auth\PasswordBroker
*/
public function broker()
{
return Password::broker();
}
该方法对 PasswordBrokerManager
class 中的 broker()
方法进行静态调用。这里的Password
是一个Facade
,在那个Facade
中,你会看到这个方法:
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'auth.password';
}
这只是 returns auth.password
最终解析为 Illuminate\Auth\Passwords\PasswordBrokerManager
的字符串。您可以在 Facade Class Reference.
下的文档中看到它
最后,在 PasswordBrokerManager
class 中,您有 broker()
方法:
/**
* Attempt to get the broker from the local cache.
*
* @param string $name
* @return \Illuminate\Contracts\Auth\PasswordBroker
*/
public function broker($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return isset($this->brokers[$name])
? $this->brokers[$name]
: $this->brokers[$name] = $this->resolve($name);
}
我正在使用Laravel 5.3,在忘记密码控制器中,有Trait SendsPasswordResetEmails
如果你去它的定义,有一个叫做 broker()
的函数,它 returns contract
类型 \Illuminate\Contracts\Auth\PasswordBroker
如果转到 \Illuminate\Contracts\Auth\PasswordBroker
,则没有名称为 broker()
的函数声明
甚至在它的派生中也没有 class \Illuminate\Auth\Passwords\PasswordBroker.php
我看到它出现在 \Illuminate\Auth\Passwords\PasswordBrokerManager.php
问题:请问broker()
如何在trait SendsPasswordResetEmails
return\Illuminate\Contracts\Auth\PasswordBroker
中发挥作用?
Password
外观 returns Illuminate\Auth\Passwords\PasswordBrokerManager
的实例。
在 PasswordBrokerManager
中有一个名为 broker
的方法。方法 broker
然后 returns 是 PasswordBroker
的一个实例。
基本上,这个:
Password::broker();
只是另一种写法:
$manager = new PasswordBrokerManager();
return $manager->broker();
您返回的是该方法的结果,而不是方法本身。
Facades
的工作方式(简而言之)。
Facades 为您提供了一种无需 new
即可获得 class 的方法(它们还有其他一些好处,但我们不需要深入探讨) .
您会注意到,您总是会从 Facade 静态调用方法,这是因为在名为 __callStatic
的 Facade 中有一个 magic method
,如果该 __callStatic
中没有方法,它将被调用 class 使用该名称(并且静态调用该方法)。
然后使用 getFacadeRoot
和 getFacadeAccessor
方法找出实际要调用的内容。然后它获取该调用的一个实例并在其上调用此方法(在此示例中 broker
)。
如果你去 Illuminate\Auth\Passwords\PasswordResetServiceProvider
你会看到:
$this->app->singleton('auth.password', function ($app) {
return new PasswordBrokerManager($app);
});
以上是告诉 Laravel
将 auth.password
注册为实例 PasswordBrokerManager
。然后在 Password
Facade class 你会看到:
protected static function getFacadeAccessor()
{
return 'auth.password';
}
希望对您有所帮助!
这是 SendsPasswordResetEmails
特征 中的方法 broker
:
/**
* Get the broker to be used during password reset.
*
* @return \Illuminate\Contracts\Auth\PasswordBroker
*/
public function broker()
{
return Password::broker();
}
该方法对 PasswordBrokerManager
class 中的 broker()
方法进行静态调用。这里的Password
是一个Facade
,在那个Facade
中,你会看到这个方法:
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'auth.password';
}
这只是 returns auth.password
最终解析为 Illuminate\Auth\Passwords\PasswordBrokerManager
的字符串。您可以在 Facade Class Reference.
最后,在 PasswordBrokerManager
class 中,您有 broker()
方法:
/**
* Attempt to get the broker from the local cache.
*
* @param string $name
* @return \Illuminate\Contracts\Auth\PasswordBroker
*/
public function broker($name = null)
{
$name = $name ?: $this->getDefaultDriver();
return isset($this->brokers[$name])
? $this->brokers[$name]
: $this->brokers[$name] = $this->resolve($name);
}