【发布时间】:2013-02-27 20:05:11
【问题描述】:
我有一个用户可以登录的程序。我有一个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 方法并将其简化为只有 commit 方法,但我也真的不喜欢这样,因为我觉得实际设置的任何属性都应该是有效的,它仍然没有完全解决问题。
我可以使用哪些其他方法来允许用户设置对象属性并验证它们,将任何错误发送回用户?还是我现在做的很好?
【问题讨论】:
标签: php forms oop validation