Php 如何在Laravel 5.4中显示验证错误-重置密码
我试图在Php 如何在Laravel 5.4中显示验证错误-重置密码,php,laravel,blade,laravel-5.4,Php,Laravel,Blade,Laravel 5.4,我试图在../app/Http/Controllers/Auth/ResetPasswordController.php中捕获来自validate的错误消息: public function reset(Request $request) { $this->validate($request, $this->rules(), $this->validationErrorMessages()); $response = $this->
../app/Http/Controllers/Auth/ResetPasswordController.php中捕获来自validate的错误消息:
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);
}
但是,如果验证在会话中失败,则不会出现错误
在:
抛出异常,但我不知道如何在会话中使用它
但是如果我在受保护函数formatValidationErrors(validator$validator)
中选中$validator->errors()->getMessages()
,则存在错误消息:
array:1 [▼
"password" => array:1 [▼
0 => "The password confirmation does not match."
]
]
已编辑
在我的例子中,问题是在Kernel.php
中多次使用StartSession
。在$middleware
中评论启动会话后,会话中的flash工作正常。我不知道它是如何发生的,何时发生的。
由此:
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,
];
及
请用以下代码替换您的代码:
$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)]);
}
将此代码用于catch validate error
$this->validate($Request, [
'Email' => 'required|unique:users',
'Username' => 'required',
'Password' => 'required',
]);
请同时提及错误。您为在blade.php文件中显示消息编写了什么?这没有捕获任何内容,您需要在回答中将$Request
更改为$Request
,但它仍然在页面旁边滑动,然后直接返回到密码/reset
登录页。通过将电子邮件更改为“Email”=>“required”
,并对用户名和密码条目进行注释,我能够让它进行验证,这至少帮助我确定导致失败的原因。。所以,dd($this->rules())代码>也显示令牌,而不是用户名,所以我认为它一定是令牌。这至少给了我一些东西。编辑,好的,我能够诊断出它是令牌,结果是这个“_-token”=>“MzVpGGIhNiVBaRWixxxf4Z0FC7KxxXPVhixAKBmL”“token”=>null
,由于某种原因,令牌是隐藏的。
$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)]);
}
$this->validate($Request, [
'Email' => 'required|unique:users',
'Username' => 'required',
'Password' => 'required',
]);