Alles in allem ein kosmetisches Problem, dennoch hätte ich gerne Alternativen dafür. Ich möchte ein Framework aufbauen, welches darauf aufbaut viele Eingaben von Nutzern zu validieren und entsprechend Resonanz zurück zu geben.
Am einfachen Beispiel eines einfachen (pseudo) Logins:
Die Art und Weise der Rückgabe über einen boolschen Wert finde ich am elegantesten, da einfach, verständlich und auf das wesentliche reduziert. Im Falle eines Fehlers habe ich aber keine Möglichkeit zu sagen, worin der Fehler besteht.
Beispiel eines einfachen Logins mit Fehlerrückgabe:
Hier gibt es zwar die Möglichkeit konkret zu sagen, worin der Fehler besteht, aber es ist immer erforderlich abzufragen, ob das zurückgegebene Objekt leer ist oder nicht. Finde ich nicht wirklich schön und umständlich. Zudem gefällt mir der Gedanke nicht, das so viele Funktionen pauschal ein leeres Array zurückgeben.
Alternativ könnte man alle Fehler in der Instanz speichern um sie dann Abzufragen:
Diese Variante hat den Nachteil, dass unterschiedlichste Validierungen sich die "getError"-Methode teilen müssen, außer man schafft für jede Art der Validierung eine eigene Methode, wie z.B. getLoginErrors - aber dann leidet die Wartbarkeit und die Klasse wir unnötig aufgebläht.
Am einfachen Beispiel eines einfachen (pseudo) Logins:
PHP-Code:
function authenticate($username, $password) {
$user = getUser($username);
if(!empty($user) && $user[ 'password' ] == $password)
return true;
return false;
}
Beispiel eines einfachen Logins mit Fehlerrückgabe:
PHP-Code:
function authenticate($username, $password) {
$user = getUser($username);
$error = array();
if(!empty($user)) {
if($user[ 'password' ] != $password) {
$error[] = 'Password Falsch';
}
} else {
$error[] = 'Username nicht bekannt';
}
return $error;
}
Alternativ könnte man alle Fehler in der Instanz speichern um sie dann Abzufragen:
PHP-Code:
function authenticate($username, $password) {
$user = getUser($username);
if(!empty($user)) {
if($user[ 'password' ] != $password)
$this->addError('Passwort falsch');
} else {
$this->addError('Username nicht bekannt');
}
return $this->hasErrors();
}
PHP-Code:
$success = $authenticator->authenticate('username', 'pw);
if(!$success) {
$errors = $authenticator->getErrors();
}
Kommentar