假设我有这个模型。 (我为示范的目的,很简单的。)PHP中需要与数据库交互的模型验证
class User
{
public $id;
public $email;
public $password;
public $errors = [];
public function isValid()
{
if (strpos($this->email, '@') === false) {
$this->errors['email'] = 'Please enter an email address';
}
// ...
return !$this->errors;
}
}
而且让我们说我有这样的DAO检索,添加,更新和删除用户。
class UserDAO
{
public function getUsers() { ... }
public function getUserById($id) { ... }
public function addUser(User $user) { ... }
public function updateUser(User $user) { ... }
public function deleteUser($id) { ... }
public function isEmailUnique($email) { ... }
}
当我处理一个形式,我通常做的是这样的:
$userDAO = new UserDAO();
$user = new User();
$user->email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$user->password = filter_input(INPUT_POST, 'password');
if ($user->isValid()) {
if ($userDAO->addUser($user)) {
// ...
} else {
// ...
}
} else {
// do something with $user->errors
}
现在,让我们说我的用户验证的一部分应该是检查邮件是否是独一无二的,我怎么使它用户模型的一部分?因此,当调用$user->isValid()
时,它还会检查电子邮件是否唯一?还是我这样做全错了?
由于我对DAO的理解很差,DAO负责与数据库的所有交互。那么我如何使模型与数据库一起工作呢?
的S.Lott的回答可能帮助你http://stackoverflow.com/a/198032/3904215。这里来自tutorialspoint的描述:http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm – AMartinNo1