首页 > 解决方案 > 为什么不出现验证错误?

问题描述

我在下面有这个功能来更新经过身份验证的用户的电子邮件。

问题是如果存在验证错误,自定义消息不会出现在视图中。

你知道为什么吗?

public function updateEmail(Request $request){

    $rules = [
        'email' => 'required|email'
    ];

    $customMessages = [
        'email.required' => 'The email field is required.',
        'email.email' => 'Please insert a valid email.'
    ];

    $validator = Validator::make($request->all(), $rules, $customMessages);

    if ($validator->fails()) {
        return redirect(route('user.index', ['user' => Auth::id()]) . '#loginData');
    }

    $user = Auth::user();
    $user->email = $request->email;

    $user->save();

    Session::flash('success', 'Email updated with success.');

    return redirect(route('user.index', ['user' => Auth::id()]) . '#loginData');
}

看法:

<div class="tab-pane fade clearfix" id="loginData" role="tabpanel" aria-labelledby="profile-tab">
    @include('includes.errors')
    <form method="post" action="{{route('user.updateEmail')}}">
        {{csrf_field()}}
        <div class="form-row">
            <div class="form-group col-md-6">
                <label>Email</label>
                <input type="email" value="{{$user->email}}" class="form-control" name="email">
            </div>
            <div class="form-group col-md-4">
                <label>Email</label>
                <button>Update Email</button>
            </div>
        </div>
    </form>
</div>

标签: laravel

解决方案


改变这个:

if ($validator->fails()) {
        return redirect(route('user.index', ['user' => Auth::id()]) . '#loginData');
    }

更改为这个,以便您可以在会话中返回错误并使用 {{$errors->first}} 或 foreach 循环通过它们, $errors->all() as $error

if ($validator->fails()) {

    return redirect()->back()->withErrors($validator);
}

在 laravel 5.6 中,当使用 withErrors 方法时,$errors 变量将在重定向后自动与您的视图共享。


推荐阅读