未显示 L5 自定义验证消息

L5 custom validation messages not displayed

我在控制器操作中使用以下代码进行验证。我 100% 确定这是用于验证的代码,因为删除和添加验证按预期工作:

$this->validate($request, [
    'email' => 'required|email',
    'password' => 'required'
], [
    'email.required' => 'Vul een e-mailadres in.',
    'email.email' => 'Vul een geldig e-mailadres in.',
    'password.required' => 'Vul een wachtwoord in.'
]);

问题是它一直显示默认错误消息 ("The email field is required.") 而不是我提供的消息 ("Vul een e-mailadres in.")。

我正在使用以下代码在视图中显示错误:

{{ $errors->first('email') }}

我想这是正确的方法,因为当我在 PhpStorm 中选择验证方法的 Go To Declaration 时,我看到了以下函数:

vendor\laravel\framework\src\Illuminate\Foundation\Validation\ValidatesRequests.php:

public function validate(Request $request, array $rules, array $messages = array())
{
    $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages);

    if ($validator->fails())
    {
        $this->throwValidationException($request, $validator);
    }
}

为什么它一直显示默认错误消息?

问题是,控制器验证使用 ValidatesRequests 并且验证方法是这样定义的:

public function validate(Request $request, array $rules)
{
    $validator = $this->getValidationFactory()->make($request->all(), $rules);

    if ($validator->fails())
    {
        $this->throwValidationException($request, $validator);
    }
}

你不能在这里传递翻译。但是,在您的情况下,您应该只在 resources/lang/nl 目录中创建带有翻译的 validation.php 文件,并在 config/app.php 文件中将 locale 设置为 nl

编辑

我查看了源代码,在较新的 Laravel 5 版本中,确实使用了第三个参数。似乎添加了新参数并且您在编译文件中有旧版本(可能您修改了 composer.json 或旧 composer.json 文件)。

每当您遇到类似问题时,您应该 运行 在您的控制台中:

php artisan clear-compiled

删除编译文件。

如果您不想在开发时使用此文件,您可以将其从 composer.json 文件中删除 - 您应该删除带有 "php artisan optimize" 的行,但是如果您不这样做会影响应用程序性能当 运行 投入生产时,不要恢复它并生成新的 compiled.php mfile。

您可以使用Validato::make()方法。

$data = Input::all();
$rules = array(
    'email' => 'required|email',
    'password' => 'required'
);
$messages = array(
    'email.required' => 'Vul een e-mailadres in.',
    'email.email' => 'Vul een geldig e-mailadres in.',
    'password.required' => 'Vul een wachtwoord in.'
);
$validator = Validator::make($data, $rules, $messages);
if ($validator->fails())
{
    return Response::json(['error' => $validator->errors()->first()]);
}