gpt4 book ai didi

php - Laravel 5 中的 After Validation Hook 有什么用

转载 作者:可可西里 更新时间:2023-11-01 00:41:51 25 4
gpt4 key购买 nike

我正在学习 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”检查添加到循环中。现在想象一下必须在许多不同的地方(多个 Controller ,可能是一个控制台脚本)运行这个验证。现在你在 3 个不同的文件中有这个 if 语句,下次你去修改它时你有 3 倍的工作量,也许你忘记在一个地方改变它......

我想不出很多用例,但这就是它背后的基本思想。

顺便说一下,有一个名为 exists 的验证规则可能会处理您的 emailExist() 方法

$rules = [
'email' => 'exists:users,email',
];

http://laravel.com/docs/5.1/validation#rule-exists

关于php - Laravel 5 中的 After Validation Hook 有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33765939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com