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

时间:2017-05-06 13:48:45

标签: laravel blade laravel-5.4

我有一个包含2个单独表格,路线和请求的页面。

在这种形式中,我有一个具有相同名称的字段(例如,每个表单中都有[0-9:]*字段)。

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

如何防止覆盖错误?

这是我的代码:

注册申请:

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'
        ];
    }
}

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

2 个答案:

答案 0 :(得分:2)

最后我找到了解决方案。

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

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'
        ];
    }
}

并且在刀片中:

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

答案 1 :(得分:0)

我有一个解决方案,但我不确定这是否是最佳方式。登录控制器使用包含方法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');
}

然后,在您的刀片文件中,您可以执行以下操作:

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