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