Validator-Klasse

Aus MAXcms

Wechseln zu: Navigation, Suche

Zwingende Voraussetzung für die Verwendung dieser Klassen ist das inkludieren folgender Datei und PHP 5 (wegen Dereferenzierung, abstrakten Klassen, Sichtbarkeit usw.):

include_once(thCMS_root.'/classes/Validation/class.Validator.php');


Das ganze funktioniert wie folgt:

// Erzeugen einer Validator-Instanz
$oValidator = new Validator();

// Ein neues Objekt hinzufügen, welches Validiert werden soll
$oValidator->addField('username', Util::_stripSlashes($_POST['username']))->addRule(new NotEmptyValidationRule(), 'username_empty');		
// Eine weitere Regeln zum gleichen Objekt hinzufügen
$oValidator->getField('username')->addRule(new LoginNotExistsValidationRule(), 'username_empty');		

// Ein neues Objekt hinzufügen, welches Validiert werden soll
$oValidator->addField('email', Util::_stripSlashes($_POST['email']))->addRule(new EmailValidationRule(), 'email_not_valid');

[...]

// Validierung der Objekte starten
$oValidator->validate();

// Abfragen ob alle Objekte valide sind
if($oValidator->isValid())
{
    [...]
}
else
{
    // Alle fehlerhaften Objekte erhalten und sich deren Fehlermeldung zurückgeben lassen
    $invalid_fields = $oValidator->getInvalidFields();
    foreach($invalid_fields as $invalid_field)
    {
        foreach($invalid_field->getErrors() as $error)
	{
	    [...]
	}
    }
}

Es gibt bereits ein Grundgerüst an Regeln, mit denen die Objekte Validiert werden können:

// Nicht valide, wenn das zu validierende Objekt bereits als E-Mail Adresse in MAXcms registriert ist
new EmailNotExistsValidationRule()

// Valide, wenn das zu validierende Objekt bereits als E-Mail Adresse in MAXcms registriert ist
new EmailNotExistsValidationRule(true)

// Nicht valide, wenn das zu validierende Objekt bereits als Loginname in MAXcms registriert ist
new LoginNotExistsValidationRule()

// Valide, wenn das zu validierende Objekt bereits als Loginname  in MAXcms registriert ist
new LoginNotExistsValidationRule(true)

// Nicht valide, wenn das zu validierende Objekt eines der Wörter enthält, die dem Konstruktor als Array übergeben werden
new TextContainsValidationRule($words)

// Nicht valide, wenn das wenn das zu validierende Objekt leer ist
new NotEmptyValidationRule() 

// Nicht valide, wenn die Länge des zu validierende Objekts nicht den Vorgaben entspricht, die dem Konstruktor übergeben wurden
// Wird nur $min übergeben, wird nur auf die minimale Länge gerprüft
// Wird für $min -1 und für $max ein Wert > 0 übergeben, wird nur auf die maximale Länge gerprüft
// Werden beide Werte übergeben, muss die Zeichenkette minimal $min und maximal $max Zeichen lang sein, damit es Valide ist
new LengthValidationRule($min, $max) 

// Nicht valide, wenn die Anzahl der Elemente des zu validierende Objekts (ein Array) nicht den Vorgaben entspricht, die dem Konstruktor übergeben wurden
// Wird nur $min übergeben, wird nur auf die minimale Anzahl gerprüft
// Wird für $min -1 und für $max ein Wert > 0 übergeben, wird nur auf die maximale Anzahl gerprüft
// Werden beide Werte übergeben, muss das Array minimal $min und maximal $max Einträge haben, damit es Valide ist
new ItemsCountValidationRule($min, $max)

// Nicht valide, wenn das zu validierende Objekt mit dem im Konstruktor übergebenen Wert nicht übereinstimmt
new IsEqualToValidationRule($compare)

Man kann beliebig viele Validation-Rules hinzufügen, wichtig ist nur, dass diese Klassen vorher inkludiert werden und von der abstrakten Klasse 'ValidationRule' erben.

Hier ein Beispiel:

class ExampleValidationRule extends ValidationRule
{	
	public function __construct()
	{
	}

	public function validate($a_value)
	{
		return true;
	}
}