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()->route('user.create')->withInput()->withErrors($validator);
@bhucho 试过了,还是一样
you may use the withErrors method to flash the error messages to the session
,这是文档中写的,然后尝试检查Flash消息是否在会话中,尝试添加@php session()->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 - 旧输入和验证错误消息不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 8.65 验证错误消息和旧值未显示在 Blade 文件中