假設我有這個模型。 (我爲示範的目的,很簡單的。)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