我想更改密码提醒的行为方式。在Laravel中,一旦用户重置其密码,password_reminders表中创建的行及其令牌将被删除。 我希望能够做其他事情(将其设置为使用等)。 我想知道的是如何扩展这种行为。
PasswordBroker中重置的方法如下:( Illuminate / Auth / reminders / PasswordBroker.php)
public function reset(array $credentials, Closure $callback)
{
// If the responses from the validate method is not a user instance, we will
// assume that it is a redirect and simply return it from this method and
// the user is properly redirected having an error message on the post.
$user = $this->validateReset($credentials);
if ( ! $user instanceof RemindableInterface)
{
return $user;
}
$pass = $credentials['password'];
// Once we have called this callback, we will remove this token row from the
// table and return the response from this callback so the user gets sent
// to the destination given by the developers from the callback return.
call_user_func($callback, $user, $pass);
$this->reminders->delete($credentials['token']);
return self::PASSWORD_RESET;
}
现在在我的RemindersController中,我正在调用外观密码:
$response = Password::reset($credentials, function($user, $password)
{
$user->password = Hash::make($password);
$user->save();
});
如何创建PasswordBroker的扩展并从我的控制器中调用它?我是否还必须创建新的服务提供商? 写一个扩展PasswordBroker的新类,写一个新的服务提供者,扩展ReminderServiceProvider以及一个新的Facade,并在我的控制器中调用那个新Facade的新方法?这是正确的方法吗?
答案 0 :(得分:0)
服务提供者和外观只是允许在应用程序级别访问类/对象的工具 - 这意味着在应用程序全局范围内。 在您的情况下,它取决于您希望拥有的位置和情况 访问你的扩展课程。在很多情况下,命名空间是一个更好的选择。 例如,您在创建新控制器时已经扩展了Laravel内置类(您的控制器扩展了基本控制器),但您没有为该类创建新的提供者和外观。
更新(如何创建新的服务提供商):
首先使用您的提供商名称在 app / 下创建新文件夹(我通常将我的提供商放在 app / services 下) 然后在composer.json
中注册provider名称空间接下来创建三个文件:
加上帮助文件(如果有的话)。
声明并定义所有内容,composer dump-autoload,你将拥有你的提供者。