2014-02-09 62 views
0

我想改變密碼提醒行爲的方式。在Laravel中,一旦用戶重置密碼,password_reminders表中使用其令牌創建的行將被刪除。 我希望能夠做其他事情(將其設置爲使用等)。 我想知道的是如何擴展這種行爲。Laravel編輯密碼提醒行爲(不刪除密碼更改行)

在PasswordBroker的方法復位情況如下:(照亮/認證/提醒/ 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我actullay調用門面密碼:

$response = Password::reset($credentials, function($user, $password) 
     { 
      $user->password = Hash::make($password); 

      $user->save(); 
     }); 

如何創建PasswordBroker的擴展並從我的控制器調用它?我還必須創建一個新的服務提供商嗎? 所以編寫一個擴展PasswordBroker的新類,編寫一個新的服務提供者來擴展ReminderServiceProvider以及一個新的Facade,並在我的控制器中調用那個新Facade的新方法?這是正確的路嗎?

回答

0

服務提供者和外觀只是允許在應用程序級別上訪問類/對象的工具 - 這意味着在應用程序的全局範圍內。 在你的情況下,它取決於你在哪裏以及在哪種情況下有 訪問你的擴展類。在很多情況下,命名空間是一個更好的選擇。例如,您在創建新控制器(您的控制器擴展基本控制器)時已經擴展了Laravel內建類,但是您並未創建該類的新提供者和外觀。

更新(如何創建新的服務提供商):

應用程序/與您的供應商的名字第一次創建新的文件夾(我通常將我的供應商下應用程序/服務) 然後註冊該在composer.json提供商命名空間

下一個創建三個文件:

  1. b ASE類文件
  2. 提供商類文件
  3. 外觀類文件,如果你有一個

加上助手文件。

聲明和定義一切,作曲家dump-autoload,你會得到你的提供者。

+0

所以你認爲創建一個擴展passwordbroker.php的類,有一個重置方法,並通過命名空間調用該擴展類/方法driectly?沒有必要通過Facades?儘管它在應用程序級別上可用,但是我該怎麼做呢?創建該類併爲其提供服務提供者和門面? –

+0

我更新了上面的答案。 – carousel

+0

看起來很容易,當解釋這樣!我會給它一個歡呼聲。 –