防止覆盖页面上的错误消息

Prevent overwriting errors message on a page

我有一个包含 2 个单独的表单、路由和请求的页面。

在这个表格中我有一个同名的字段(例如在每个表格中我有 email 字段)。

问题是当我验证一个表单时,当表单有错误时,两种表单都会显示错误。

如何防止覆盖错误?

这是我的代码:

注册请求:

class RegisterFormRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'name' => 'required',
            'location' => 'required'
        ];
    }
}

登录请求:

class LoginFormRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|email',
            'password' => 'required'
        ];
    }
}

在blade中,我在两种形式的电子邮件字段上方都使用了这段代码:

{{$errors->has('email') ? 'has-error' : null }}

当我没有在登录表单中输入电子邮件并提交时,错误也会显示在注册表单中的电子邮件字段上方。

我有一个解决方案,但我不确定这是否是最好的解决方案。登录控制器使用 AuthenticatesUsers 特征,其中包含一个方法 sendFailedLoginResponse

通过覆盖LoginController中的这个方法,你可以这样命名错误消息包:

protected function sendFailedLoginResponse(Request $request)
{
    $errors = [$this->username() => trans('auth.failed')];

    if ($request->expectsJson()) {
        return response()->json($errors, 422);
    }

    return redirect()->back()
        ->withInput($request->only($this->username(), 'remember'))
        ->withErrors($errors, 'login');
}

然后,在你的 blade 文件中你可以这样做:

@if (! $errors->login->isEmpty())
    <ul>
        @foreach ($errors->login->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif

我终于找到了解决办法。

我应该在 Request 文件中添加 $errorBag 变量:

class RegisterFormRequest extends FormRequest
{
    protected $errorBag = 'register';

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'name' => 'required',
            'location' => 'required'
        ];
    }
}

并在 blade 中:

{{$errors->register->has('email') ? 'has-error' : null }}