Laravel 8 - 旧输入和验证错误消息不起作用

Posted

技术标签:

【中文标题】Laravel 8 - 旧输入和验证错误消息不起作用【英文标题】:Laravel 8 - Old inputs and validation error messages are not working 【发布时间】:2021-03-13 09:50:59 【问题描述】:

如果该输入的验证失败以及指定字段上的先前输入,我将尝试在该字段下方显示错误 div。

这是我到目前为止的进展: 在 store 函数 (UserController > store) 内的我的 controller 文件中:

public function store(Request $request)

    $validationRules = array(
        'first_name' => 'required|min:2|max:150',
        'last_name' => 'required|min:2|max:150',
        'gender' => 'required',
        'birthdate' => 'required',
        'user_contact' => 'required|min:10|max:20',
        'email' => 'required|unique:users|max:150'
    );

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

    if($validator->fails())
        //dd($validator)
        return redirect(route('user.create'))->withInput()->withErrors($validator);
    

.....

当我尝试使用 dd() 打印 $validator 时,它没有任何问题,它包含 验证错误消息、所有输入和验证规则

这是我在 create.blade.php (view) 中的 sn-p 代码:

<form class="form-horizontal" method = "POST" action = " route('user.store') ">
        @csrf
            <div class="form-group row">
                <div class="col-md-12">
                    <strong><font color="red">*</font> Indicates required fields.</strong>
                </div>
                <div class="col-md-4">
                    <label for="u_fname" class="col-sm-6 col-form-label">First Name <font color="red">*</font></label>
                    <div class="input-group mb-2 $errors->has('u_fname') ? 'has-error' : ''" >
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fa fa-user" aria-hidden="true"></i></span>
                        </div>
                        <input type="text" 
                                class="form-control" 
                                id="first_name" 
                                name = "first_name"
                                value=" old('first_name') "
                                minlength="2"
                                maxlength="150"
                                required/>
                        @error('first_name')
                            <div class="alert-danger">$errors->first('first_name')  </div>
                        @enderror
                    </div>
                </div>
                <div class="col-md-4">
                    <label for="u_lname" class="col-sm-6 col-form-label">Last Name <font color="red">*</font></label>
                    <div class="input-group mb-2 $errors->has('u_lname') ? 'has-error' : ''" >
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fa fa-user" aria-hidden="true"></i></span>
                        </div>
                        <input type="text" 
                                class="form-control" 
                                id="last_name" 
                                name = "last_name"
                                value=" old('last_name') "
                                minlength="2"
                                maxlength="150"
                                required/>
                        @error('last_name')
                            <div class="alert-danger">$errors->first('last_name')  </div>
                        @enderror
                    </div>
                </div>
                <div class="col-md-4">
                    <label for="u_gender" class="col-sm-6 col-form-label">Gender <font color="red">*</font></label>
                    <div class="input-group mb-2 $errors->has('u_gender') ? 'has-error' : ''" >
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fas fa-venus-mars"></i></span>
                        </div>
                        <select class = "form-control" id = "gender" name = "gender" required>
                            <option value = "M">Male</option>
                            <option value = "F">Female</option>
                        </select>
                        @error('gender')
                            <div class="alert-danger">$errors->first('gender')  </div>
                        @enderror
                    </div>
                </div>
                <div class="col-md-4">
                    <label for="u_birthdate" class="col-sm-6 col-form-label">Birth Date <font color="red">*</font></label>
                    <div class="input-group mb-2 $errors->has('u_birthdate') ? 'has-error' : ''" >
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
                        </div>
                        <input type="text" 
                                class="form-control" 
                                id="birthdate" 
                                name = "birthdate"
                                value=" old('birthdate') "
                                required/>
                        <div class="alert-danger">$errors->first('birthdate')  </div>
                    </div>
                </div>
                <div class="col-md-4">
                    <label for="u_contact" class="col-sm-6 col-form-label">Contact Number <font color="red">*</font></label>
                    <div class="input-group mb-2 $errors->has('u_contact') ? 'has-error' : ''" >
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fas fa-phone"></i></span>
                        </div>
                        <input type="text" 
                                class="form-control" 
                                id="user_contact" 
                                name = "user_contact"
                                value=" old('user_contact') "
                                onkeyup="this.value=this.value.replace(/[^\d]/,'')"
                                minlength="10"
                                maxlength="20"
                                required/>
                        @error('user_contact')
                            <div class="alert-danger">$errors->first('user_contact')  </div>
                        @enderror
                    </div>
                </div>
                <div class="col-md-4">
                    <label for="u_email" class="col-sm-6 col-form-label">E-Mail Address<font color="red">*</font></label>
                    <div class="input-group mb-2 $errors->has('u_email') ? 'has-error' : ''" >
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fas fa-at"></i></span>
                        </div>
                        <input type="email" 
                                class="form-control" 
                                id="email" 
                                name = "email"
                                value=" old('email') "
                                minlength="10"
                                maxlength="150"
                                required/>
                        @error('email')
                            <div class="alert-danger">$errors->first('email')  </div>
                        @enderror
                    </div>
                </div>
                <div class="col-md-4">
                    <label for="u_utype" class="col-sm-6 col-form-label">User Type <font color="red">*</font></label>
                    <div class="input-group mb-2 $errors->has('u_utype') ? 'has-error' : ''" >
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fas fa-user-cog"></i></span>
                        </div>
                        <select class = "form-control" id = "u_type_input" name = "u_type_input" required>
                            <option value = "E">Employee</option>
                            <option value = "A">Administrator</option>
                        </select>
                        @error('u_type_input')
                            <div class="alert-danger">$errors->first('u_type_input')  </div>
                        @enderror
                    </div>
                </div>
            </div>
        </div>
        <div class="card-footer">
            <button type="submit" class="btn btn-default float-right" name = "submit_create" id = "submit_create">Submit</button>
        </div>
        </form>

请注意,我删除了 autocomplete=off,因为我阅读了一些导致问题的帖子,但在我的情况下仍然不起作用。 我一直在阅读与我的问题相关的所有 *** 帖子,但大多数场景问题都发生在 Laravel 5 上,我使用当前最新版本的 Laravel 框架,即 Laravel 8。

问题的原因似乎是什么?以及我应该如何保留 旧/以前的输入并在失败后显示错误消息 验证? 我怀疑问题出在刀片上 文件或与引导程序等资源相关的资源。

【问题讨论】:

我不确定但尝试像这样重定向()redirect()-&gt;route('user.create')-&gt;withInput()-&gt;withErrors($validator); @bhucho 试过了,还是一样 you may use the withErrors method to flash the error messages to the session,这是文档中写的,然后尝试检查Flash消息是否在会话中,尝试添加@php session()-&gt;all(); @endphp,它将显示消息是否存在&用什么键 感谢@bhucho 的帮助,我现在可以使用旧键和新键打印 flash 的值,但它显示为空(没有键也没有值)。看来这是一个新问题,也是一个进步.. 不明白,能不能详细解释一下 【参考方案1】:

你可以试试这个重定向

        if ($validator->fails())
        
            return redirect()->back()->withErrors($validator->errors());
        

在显示到刀片文件时尝试这个

 @error('user_contact')
        <div style="color: red;"> $message </div>
 @enderror

【讨论】:

它给了我这个错误:ErrorException Undefined variable: message (View: C:\xampp\htdocs\Inventory\resources\views\User\create.blade.php) - $message is undefined 如果是的话,您能否在控制器中进行更改,添加您的问题?

以上是关于Laravel 8 - 旧输入和验证错误消息不起作用的主要内容,如果未能解决你的问题,请参考以下文章

html5 验证需要 setCustomValidity

如何在 Laravel 中使用旧输入重定向?

Laravel 8.65 验证错误消息和旧值未显示在 Blade 文件中

如何根据输入请求规则在 laravel 刀片中显示错误消息

如何在 laravel 8 中为 API 返回验证规则和消息作为 JSON

如何显示输入数组的验证错误?