php - 在 Laravel ui auth forgot password 表单中更改输入名称
问题描述
我已经在同一个页面上合并了所有登录、创建用户和忘记密码,并且对于错误处理,3 个表单上的“电子邮件”输入应该不同。我已将登录表单的电子邮件输入中的名称设置为:默认为“电子邮件”。我将创建用户的名称设置为:“register-email”并更改了 RegisterController 中的“验证器”功能,因此它看起来像这样:
protected function validator(array $data)
{
$validator = Validator::make($data, [
'register-email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'],
'register-password' => ['required', 'string', 'min:8', 'max:255', 'confirmed'],
]);
$validator->setAttributeNames([
'register-email' => 'email',
'register-password' => 'password',
]);
return $validator;
}
它就像一个魅力!
现在我在忘记表单上将电子邮件输入名称设置为“忘记电子邮件”,但我不知道如何更正 ForgotPasswordController 来处理这个问题。
我试图用更新的名称覆盖以下函数:
protected function validateEmail(Request $request)
{
$request->validate(['forgot-email' => 'required|email']);
}
protected function credentials(Request $request)
{
return $request->only('forgot-email');
}
protected function sendResetLinkFailedResponse(Request $request, $response)
{
if ($request->wantsJson()) {
throw ValidationException::withMessages([
'forgot-email' => [trans($response)],
]);
}
return back()
->withInput($request->only('forgot-email'))
->withErrors(['forgot-email' => trans($response)]);
}
但我只是得到一个错误说:
SQLSTATE [42703]:未定义列:7 错误:列“忘记电子邮件”不存在第 1 行:从“用户”中选择 *,其中“忘记电子邮件”= $1 限制 1 ^(SQL:从“用户”中选择 * “忘记电子邮件” = test@domain.com 限制 1)
问题很明显,它认为 input-name 与列名相同,而这里不是这样。那么我如何告诉控制器使用“忘记电子邮件”作为电子邮件?
解决方案
我找到了解决方案。我只是将忘记电子邮件请求合并到 validateEmail 函数中的电子邮件请求,如下所示:
protected function validateEmail(Request $request)
{
$request->merge(['email' => $request->get('forgot-email')]);
$request->validate(['email' => 'required|email']);
}
protected function credentials(Request $request)
{
return $request->only('email');
}
protected function sendResetLinkFailedResponse(Request $request, $response)
{
if ($request->wantsJson()) {
throw ValidationException::withMessages([
'forgot-email' => [trans($response)],
]);
}
return back()
->withInput($request->only('email'))
->withErrors(['forgot-email' => trans($response)]);
}
更新:这只是解决方案的一部分。当我在刀片中执行 @error 时,错误仍然作为“电子邮件”发送
更新2:好的,如果验证失败,错误被绑定到“电子邮件”,但对于所有其他错误,它是:“忘记电子邮件”所以我只是将验证方法更改为验证“忘记电子邮件”而不是电子邮件和现在它似乎工作正常。validateEmail 函数现在看起来像这样:
protected function validateEmail(Request $request)
{
$request->merge(['email' => $request->get('forgot-email')]);
$request->validate(['forgot-email' => 'required|email']);
}
推荐阅读
- angularjs - AngularJs ng-show 和自定义指令
- python - 格式化要替换的文本
- jquery - 引导颜色选择器基本示例不起作用
- javascript - 使用 then 方法解决 js 中的承诺
- php - Royal Mail API 错误:httpCode":"404", "httpMessage":"Not Found", "moreInformation":"没有资源匹配请求的 URI
- javascript - 为导入的 CSS 文件添加前缀
- html - 如何设置 layout-wrap 仅在 gt-sm 时应用?
- excel - Excel 数据透视表 - 合并 2 张工作表中的数据 - 显示的总和不正确
- hibernate - 尝试在 Spring Boot 自动配置的 DataJpaTest 中使用 entityManagerFactory 时获取对 entityManagerFactory 的循环引用
- javascript - XML 的 UI5 屏幕尺寸相关属性