为什么 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',
    ];
}