为什么 Laravel 错误消息在我的应用程序中不正确? = 例如:validation.min.string
Why Laravel error messages are not correct in my app ? = ex: validation.min.string
今天我的 laravel 应用程序遇到了一个奇怪的问题:
验证错误消息与往常不同:例如“密码必须至少包含 8 个字符”。
而不是这个,错误消息显示“validation.min.string”。
我从来没有遇到过这类问题,也不明白发生了什么。
我尝试在 LoginRequest 中添加 messages() 方法(我正在使用 Breeze 进行身份验证):
class LoginRequest extends FormRequest
{
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|string|email',
'password' => 'required|string|min:6',
];
}
public function messages()
{
return [
'email.required' => 'Email is required',
'email.email' => 'Email is invalid',
'password.required' => 'Password is required',
'password.min:6' => 'Password must be at least 6 characters',
];
}
/**
* Attempt to authenticate the request's credentials.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function authenticate()
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
/**
* Ensure the login request is not rate limited.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function ensureIsNotRateLimited()
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout($this));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
/**
* Get the rate limiting throttle key for the request.
*
* @return string
*/
public function throttleKey()
{
return Str::lower($this->input('email')).'|'.$this->ip();
}
}
当然,我使用 blade 指令在我的视图中显示消息:
@error('email')
<span class="validation-error">{{ $message }}</span>
@enderror
@error('password')
<span class="validation-error">{{ $message }}</span>
@enderror
但没有其他事情发生...只是相同的不友好消息“validation.min.string”或“auth.failed”或类似的消息,具体取决于错误。
身份验证工作正常,只是那些错误消息有问题。
我在另一个表单上遇到了同样的问题,我解决了它创建一个带有规则和消息方法的请求。
这次不行了。
谁能帮我解决一下?
此问题出现在自定义验证消息中
此索引 password.min:6
需要更改为 password.min
更多信息请查看Laravel custom error message
我建议你使用这个代码:
public function messages(): array
{
return [
'email.required' => 'Email is required',
'email.email' => 'Email is invalid',
'password.required' => 'Password is required',
'password.min' => 'Password must be at least 6 characters',
];
}
今天我的 laravel 应用程序遇到了一个奇怪的问题: 验证错误消息与往常不同:例如“密码必须至少包含 8 个字符”。 而不是这个,错误消息显示“validation.min.string”。
我从来没有遇到过这类问题,也不明白发生了什么。
我尝试在 LoginRequest 中添加 messages() 方法(我正在使用 Breeze 进行身份验证):
class LoginRequest extends FormRequest
{
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|string|email',
'password' => 'required|string|min:6',
];
}
public function messages()
{
return [
'email.required' => 'Email is required',
'email.email' => 'Email is invalid',
'password.required' => 'Password is required',
'password.min:6' => 'Password must be at least 6 characters',
];
}
/**
* Attempt to authenticate the request's credentials.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function authenticate()
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
/**
* Ensure the login request is not rate limited.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function ensureIsNotRateLimited()
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout($this));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
/**
* Get the rate limiting throttle key for the request.
*
* @return string
*/
public function throttleKey()
{
return Str::lower($this->input('email')).'|'.$this->ip();
}
}
当然,我使用 blade 指令在我的视图中显示消息:
@error('email')
<span class="validation-error">{{ $message }}</span>
@enderror
@error('password')
<span class="validation-error">{{ $message }}</span>
@enderror
但没有其他事情发生...只是相同的不友好消息“validation.min.string”或“auth.failed”或类似的消息,具体取决于错误。
身份验证工作正常,只是那些错误消息有问题。
我在另一个表单上遇到了同样的问题,我解决了它创建一个带有规则和消息方法的请求。 这次不行了。
谁能帮我解决一下?
此问题出现在自定义验证消息中
此索引 password.min:6
需要更改为 password.min
更多信息请查看Laravel custom error message
我建议你使用这个代码:
public function messages(): array
{
return [
'email.required' => 'Email is required',
'email.email' => 'Email is invalid',
'password.required' => 'Password is required',
'password.min' => 'Password must be at least 6 characters',
];
}