2017-03-15 31 views
2

重置密碼,我試圖抓住從驗證錯誤消息.../app/Http/Controllers/Auth/ResetPasswordController.php如何顯示驗證錯誤 - 在Laravel 5.4

public function reset(Request $request) 
    { 
     $this->validate($request, $this->rules(), $this->validationErrorMessages()); 

     $response = $this->broker()->reset(
       $this->credentials($request), function ($user, $password) { 
      $this->resetPassword($user, $password); 
     } 
     ); 

     return $response == Password::PASSWORD_RESET 
       ? $this->sendResetResponse($response) 
       : $this->sendResetFailedResponse($request, $response); 
    } 

但如果驗證的會話失敗,沒有錯誤。

在:

public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = []) 
    { 
     $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes); 
     if ($validator->fails()) { 
      $this->throwValidationException($request, $validator); 
     } 
    } 

拋出異常,但我不知道如何在會話中使用它。

但是,如果我在protected function formatValidationErrors(Validator $validator)錯誤信息檢查$validator->errors()->getMessages()存在:

array:1 [▼ 
    "password" => array:1 [▼ 
    0 => "The password confirmation does not match." 
    ] 
] 

EDITED

在我的情況問題Kernel.php是多次使用StartSession。在評論StartSession$middleware在會話中的閃光效果很好。我不知道如何以及何時可能發生。 從這:

protected $middleware = [ 
      \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
      \Illuminate\Session\Middleware\StartSession::class, 
      \App\Http\Middleware\LanguageSwitcher::class, 
     ]; 

這樣:

protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     //\Illuminate\Session\Middleware\StartSession::class, 
     \App\Http\Middleware\LanguageSwitcher::class, 
    ]; 

protected $middlewareGroups = [ 
     'web' => [ 
      \App\Http\Middleware\EncryptCookies::class, 
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
      \Illuminate\Session\Middleware\StartSession::class, 
(...) 
+0

請提及錯誤。 – Gammer

+0

你在blade.php文件中顯示的消息是什麼? –

回答

0

請與下面的代碼替換代碼:

$this->validate($request, [ 
       'token' => 'required', 
       'email' => 'required|email|max:35', 
       'password' => 'required|confirmed|min:6|max:15', 
      ]); 

      $credentials = $request->only(
       'email', 'password', 'password_confirmation', 'token' 
      ); 

      $response = Password::reset($credentials, function ($user, $password) { 
       $this->resetPassword($user, $password); 
      }); 
switch ($response) { 
      case Password::PASSWORD_RESET: 
       return redirect($this->redirectPath())->with('status', trans($response)); 

      default: 
       return redirect()->back() 
          ->withInput($request->only('email')) 
          ->withErrors(['email' => trans($response)]); 
     } 
1

使用此代碼爲捕捉驗證errror

$this->validate($Request, [ 
    'Email' => 'required|unique:users', 
    'Username' => 'required', 
    'Password' => 'required', 
    ]); 
+0

這沒什麼好說的,你需要在你的答案中把'$ Request'改爲'$ request',但它仍然在頁面上滑動,並且直接返回到'password/reset'登錄頁面。 – blamb

+0

我可以通過將'Email'改爲''email'=>'required''並評論用戶名和密碼entrys來驗證它,至少幫助我確定哪一個導致了失敗。所以,'dd( $ this-> rules());'也顯示標記,而不是用戶名,所以我認爲它必須是標記。這至少讓我繼續下去。 – blamb

+0

編輯,好吧,我能夠診斷出它的標記,結果是這個「_token」=>「MzVpGGIhNiVBaRWixxxf4Z0FC7KxxXPVhixAKBmL」 「token」=> null'由於某種原因,標記是隱藏的。 – blamb