Sagen wir, ich habe dieses Modell. (Ich habe es zu Demonstrationszwecken sehr einfach.)Modellvalidierung in PHP, die eine Interaktion mit der Datenbank erfordert
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;
}
}
Und lassen Sie uns sagen, ich habe dieses DAO zum Abrufen, Hinzufügen, Aktualisieren und Löschen von Benutzern.
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) { ... }
}
Wenn ich eine Form verarbeiten, das tue ich normalerweise etwas wie folgt aus:
$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
}
Nun lassen Sie uns Teil meiner Benutzervalidierung sagen sollte, zu überprüfen, ob E-Mail eindeutig zuzuordnen sind, wie kann ich es machen Teil des Benutzermodells? Also, wenn $user->isValid()
aufgerufen wird, überprüft es auch, ob die E-Mail eindeutig ist? Oder mache ich das alles falsch?
Aus meinem schwachen Verständnis von DAOs sind DAOs für alle Interaktionen mit der Datenbank verantwortlich. Wie kann ich das Modell von innen mit der Datenbank arbeiten lassen?
Die Antwort von S.Lott hilft dir wahrscheinlich http://StackOverflow.com/a/198032/3904215. Und hier eine Beschreibung von tutorialspoint: http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm – AMartinNo1