微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在Laravel 5中使用After Validation Hook有什么用

我正在学习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 举报,一经查实,本站将立刻删除。

相关推荐