我正在学习Laravel 5并尝试验证数据库中是否存在电子邮件,然后在失败时添加一些自定义消息.我在Laravel的文档中找到了After Validation Hook
$validator = Validator::make(...);
$validator->after(function($validator) use ($email) {
if (emailExist($email)) {
$validator->errors()->add('email', 'This email has been used!');
}
});
if ($validator->fails()) {
return redirect('somewhere')
->withErrors($validator);
}
但我真的不明白这是什么.因为我可以这样做:
//as above
if (emailExist($email)) {
$validator->errors()->add('email', 'This email has been used!');
}
//redirect as above
它仍然输出相同的结果.我什么时候应该使用第一个来验证某些东西而不是第二个?
解决方法:
第一种方法的要点就是保持Validator对象中包含的所有内容,使其更具可重用性.
是的,在你的情况下它完全相同.但想象一下,如果你想验证多个项目.
foreach ($inputs as $input) {
$validator->setData($input);
if ($validator->fails()) { ... }
}
在您的情况下,您将必须添加“if”检查循环.现在想象必须在许多不同的地方运行此验证(多个控制器,可能是控制台脚本).现在你在3个不同的文件中有这个if语句,下次你去修改它你有3倍的工作量,也许你忘记在一个地方改变它…
我想不出很多用例,但这是它背后的基本思想.
顺便说一句,有一个名为exists的验证规则可能会处理你的emailExist()方法
$rules = [
'email' => 'exists:users,email',
];
http://laravel.com/docs/5.1/validation#rule-exists
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。