我在控制器操作中使用以下代码进行验证。我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);
}
}
为什么会一直显示默认错误消息?
答案 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.php
至locale
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()]);
}