Ich habe zufällig bei Check von diversen Features von Smarty auf der Smarty-Seite nun ein Plugin entdeckt, dass die Validierung von Form-Eingaben zum Kinderspiel machen sollte.
Ob das am Ende stimmt ist noch offen. Auf alle Fälle habe ich es einmal installiert, leider ist die Dokumentation von dem Plugin eher bescheiden.

Nichts desto Trotz ist die Philosophie gar nicht so schlecht, auch wenn man da wahrscheinlich etwas besser hätte machen können.

Immerhin gibt es einen Anstoß zu der Idee, entweder ein eigenes Framework zu integrieren oder zumindest meinen Code soweit anzupassen, dass die Validation auf vernünftige Weise genutzt werden kann.

Nach langem Basteln habe ich mal eine Maske umgebaut. Das Plugin selbst habe ich in das Projekt-Verzeichnis unter: lib gepackt wo ja auch das normale Smarty liegt. Die Plugins kommen dort natürlich ins Unterverzeichnis “plugins”.

Nun ein paar Hinweise, um das Plugin sinnvoll zu integrieren:

require_once('lib/SmartyValidate.class.php')

zur Integration des Validators in das PHP-File.

session_start()

unbedingt aufrufen, damit SmartyValidator genutzt werden kann. Irgendwie speichert der nämlich alle Validations in der Session.

bei jedem get wird ein

SmartyValidate::connect($smarty, true)

gemacht. Natürlich darauf achten, dass smarty vorher initialisiert ist.
Durch das Beispiel hab ich auch gleich gelernt, dass

empty($_POST)

dazu genutzt werden kann, um zwischen GET und POST-Modus zu unterscheiden.
Für alle Felder, die im Form genutzt werden, wird der Befehl:

SmartyValidate::register_validator('validateId','FeldId','validationArt')

aufgerufen werden. Optional können noch weitere Parameter angegeben werden, um mehrfache Validierungen zu ein und dem gleichen Feld zuzulassen z.B. ist der 4. Parameter zur Prüfung auf leere Felder gedacht (true setzen).

Beim Post bzw. in der Ajax-Funktion muss wiederum ein

SmartyValidate::connect($smarty)

diesmal ohne zweiten Parameter durchgeführt werden. Anschließend können mit

if (SmartyValidate::is_valid($_POST) ) 
             SmartyValidate::disconnect();
  else
  {
       $smarty->assign($_POST);
  }

die Fehlermeldungen ausgegeben werden, wenn denn welche da sind. Das

$smarty->assign($_POST)

macht dann anscheinend die Fehleranzeige.

In den Templates selbst kann mit

{validate id="name" message="Benutzername muss eingegeben werden"}

die Validierung initialisiert und der Validierung eine Message zugeordnet werden.

Für mich ist noch fraglich inwieweit dieser Mechanismus auf Ajax angewendet werden kann, da im Falle von Ajax ja kein $_POST gesendet wird. Außerdem wird vermutlich die Logik der Anzeige im roten und grünen Balken nicht immer funktionieren, vor allem dann nicht, wenn Unterseiten verschiedene Ausprägungen haben (z.B. Account – je nachdem, ob Privatkunde oder Firmenkunde).

Meine Idee ist jedoch eine globale Methode zu entwickeln, die das $_POST-Array bzw. das $formValues-Array durchgeht und aus einer am Anfang des Page-Calls initialisierten Liste aus Element-Namen, Message-Code und Prüfungsart jeweils eine Message bei Fehler generiert und in Form eines globalen Errortextes zurückliefert.
Dazu jedoch später.

Ich werde noch einmal genauer evaluieren inwieweit die SmartyValidate-Klasse mir genauer helfen kann. Auf alle Fälle ist die Idee einer globalen Prüfung gar nicht so schlecht. Zumindest spart man sich da viel Schreibarbeit.

Schreibe einen Kommentar

Artikel, die Dir auch gefallen könnten

Sicherung eines Windows-Server-Systems

In den Desktop-Umgebungen (Windows 7, 8, 10) gibt es die Möglichkeiten, vor Installation einer Software einen Wiederherstellungspunkt zu erstellen, um mögliche Probleme bei der Installation

mehr...