【问题标题】:Change input name in Laravel ui auth forgot password form在 Laravel ui auth forgot password 表单中更改输入名称
【发布时间】:2021-06-22 07:27:41
【问题描述】:

我已经在同一个页面上合并了所有登录、创建用户和忘记密码,并且对于错误处理,3 个表单上的“电子邮件”输入应该不同。我已将登录表单的电子邮件输入中的名称设置为:默认为“电子邮件”。我已将创建用户的名称设置为:“注册电子邮件”并更改了 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 错误:列“forgot-email”确实 不存在 LINE 1: select * from "users" where "forgot-email" = $1 限制 1 ^ (SQL: select * from "users" where "forgot-email" = test@domain.com 限制 1)

问题很明显,它认为input-name和列名是一样的,这里不是这样的。那么如何告诉控制器使用“forgot-email”作为电子邮件呢?

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    我找到了解决方案。我只是将忘记电子邮件请求合并到 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']);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 2018-11-13
      • 2017-10-27
      • 2014-02-04
      • 1970-01-01
      相关资源
      最近更新 更多