我有一个用户可以登录的程序。我有一个User
类,当他们登录时,他们的所有属性(权限、用户名、真实姓名等)都保存为类属性。但是,由于所有数据都需要验证,因此我很难考虑让用户更新自己的信息的最佳方法。
目前,当用户尝试更新他们自己的信息时,例如他们的电子邮件地址,我会:
// Set new email
$try = $user->setEmail($_POST['new_email']);
if ($try !== true) {
$errors[] = $try;
}
...
if (isset($errors) {
// Tell user what went wrong
} else {
$user->saveValuesToDB();
}
它工作正常,但对我来说似乎相当难看,因为User->setEmail()
需要具有混合返回类型,因为电子邮件可能因多种原因而无效(未找到域、无效格式、提供的空字符串、已被其他用户使用等)并且需要将确切原因传回给用户,但据我所知,通常不鼓励混合回报。
我想到的另一种方法是只更新所有属性而不执行任何类型的验证,然后User->commitAllChanges()
在最后执行所有验证,这将从所有 setter 方法中取出多个返回并减少它仅提交方法,但我真的不喜欢这个,因为我觉得实际设置的任何属性都应该是有效的,它仍然没有完全摆脱问题。
我可以使用哪些其他方法来允许用户设置对象属性并验证它们,将任何错误发送回用户?还是我现在做的很好?