2017-03-15 68 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