Laravel编辑密码提醒行为(不删除密码更改时的行)

时间:2014-02-09 22:46:39

标签: php laravel laravel-4 ioc-container

我想更改密码提醒的行为方式。在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的新方法?这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

服务提供者和外观只是允许在应用程序级别访问类/对象的工具 - 这意味着在应用程序全局范围内。 在您的情况下,它取决于您希望拥有的位置和情况 访问你的扩展课程。在很多情况下,命名空间是一个更好的选择。 例如,您在创建新控制器时已经扩展了Laravel内置类(您的控制器扩展了基本控制器),但您没有为该类创建新的提供者和外观。

更新(如何创建新的服务提供商):

首先使用您的提供商名称在 app / 下创建新文件夹(我通常将我的提供商放在 app / services 下) 然后在composer.json

中注册provider名称空间

接下来创建三个文件:

  1. 基类文件
  2. 提供程序类文件
  3. 门面类文件
  4. 加上帮助文件(如果有的话)。

    声明并定义所有内容,composer dump-autoload,你将拥有你的提供者。