未显示L5自定义验证消息

时间:2015-03-19 22:35:07

标签: validation laravel laravel-5 laravel-validation

我在控制器操作中使用以下代码进行验证。我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.'
]);

问题是它一直显示默认错误消息("电子邮件字段是必需的。")而不是我提供的消息(" Vul een e-mailadres在"。)

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

{{ $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);
    }
}

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

2 个答案:

答案 0 :(得分:2)

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

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

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

你无法通过这里翻译。但是,在您的情况下,您应该在validation.php目录和resources/lang/nl文件集config/app.phplocale

中创建nl文件。

修改

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

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

php artisan clear-compiled

删除已编译的文件。

如果您不希望在开发时使用此文件,则可以将其从composer.json文件中删除 - 您应该删除"php artisan optimize"行,但如果您不这样做会影响应用性能# 39;在生产中运行时,恢复它并生成新的compiled.php mfile。

答案 1 :(得分:0)

您可以使用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()]);
}