防止覆盖页面上的错误消息
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 }}
我有一个包含 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 }}