{"id":47,"date":"2009-05-20T20:57:29","date_gmt":"2009-05-20T20:57:29","guid":{"rendered":"http:\/\/devblog.cssec.de\/?p=47"},"modified":"2018-11-13T20:57:54","modified_gmt":"2018-11-13T20:57:54","slug":"smarty-validation-die-zweite","status":"publish","type":"post","link":"https:\/\/www.cssec.de\/blog\/2009\/05\/20\/smarty-validation-die-zweite\/","title":{"rendered":"Smarty Validation die zweite"},"content":{"rendered":"<p>Nun sind ein paar Tage vergangen und ich bin schlauer\u2026.<\/p>\n<p>Die Smarty Form Validation-Engine ist zwar im Gro\u00dfen und Ganzen ganz n\u00fctzlich jedoch hat die bei der Validierung vom Webshop keine bzw. kaum gro\u00dfen Nutzen gehabt.<br \/>\nHintergrund ist, dass die meisten Calls im Webshop per AJAX erfolgen und ich partout keinen sinnvollen Weg gefunden habe die Validierungs-Messages in den Ajax-Response zu packen.<\/p>\n<p>Daher habe ich mein eigenes kleines Framework gebastelt.<br \/>\nEinfach eine Klasse angelegt mit verschiedenen Attributen. Einem Form-Namen, einem Feldnamen, einer Methode. Alternativ noch ein Fieldname2 der auch als Methodenname missbraucht werden kann. Und nur f\u00fcr den Fall, dass es ben\u00f6tigt wird, ein Wert.<br \/>\nDie Klasse hei\u00dft: <em>FieldCheckClass<\/em> und wird quasi intern genutzt.<\/p>\n<p>Dann schnell noch in der <em>BaseFunctions<\/em> 3 Funktionen geschrieben und ein paar Konstanten eingef\u00fchrt und schon lief die Sache.<br \/>\nWie das geht? Eigentlich ganz einfach.<\/p>\n<p>Mit einer Methode <em>addCheck($formIdentifier, $fieldName, $errorMessageId, $checkMethodType, [$fieldName2 \/ $methodName], [$constant])<\/em> wird ein Array von Check-Objekten gef\u00fcllt.<\/p>\n<p>Diese Methode ruft man am Anfang einer PHP-Seite f\u00fcr jeden zu pr\u00fcfenden Wert auf.<br \/>\nAls <em>$checkMethodType<\/em> k\u00f6nnen die Konstanten aus der Klasse <em>CheckConstants<\/em> genutzt werden.<\/p>\n<p>Vor der Initialisierung sollte die L\u00f6schung der vormals eingestellten Checks erfolgen. Dies erfolgt mit der Methode <em>resetChecks<\/em>. Als Parameter wird dabei der $formIdentifier genutzt.<\/p>\n<p>Nat\u00fcrlich daran denken, bestehende Eintr\u00e4ge zu pr\u00fcfen. Als \u00dcbergabe gibts einen Form-Identifier (wenn man ggf. mehrere Tabs gleichzeitig auf hat), den Formnamen, den Message-Code und die Pr\u00fcfmethode.<\/p>\n<p>Bisher habe ich folgende Methoden implementiert:<\/p>\n<p>&#8211; Pr\u00fcfung auf Leer &#8211; Konstante: <em>$CHECK_EMPTY<\/em><br \/>\n&#8211; Pr\u00fcfung auf korrekte Email-Adresse <em>$CHECK_EMAIL<\/em><br \/>\n&#8211; Pr\u00fcfung auf Gleichheit zweier Felder <em>$CHECK_EQUAL_FIELDS<\/em><br \/>\n&#8211; Pr\u00fcfung, dass mindestens ein Feld leer oder zwei Felder gleich sind <em>$CHECK_EQUAL_OR_NULL<\/em><br \/>\n&#8211; Pr\u00fcfung auf Gleichheit bzgl. einer Konstante <em>$CHECK_EQUAL_CONSTANT<\/em><br \/>\n&#8211; Pr\u00fcfung \u00fcber SQL-Funktion <em>$CHECK_SQL<\/em><\/p>\n<p>Ganz stolz bin ich auf die letzte Methode. Die bekommt einen beliebige Methodennamen \u00fcbergeben, f\u00fchrt diese Methode \u00fcber die PHP-Methodik: <em>call_user_func<\/em> mit dem Inhalt des Feldes aus und bekommt als Boolean-Wert zur\u00fcck geliefert, ob die Ausf\u00fchrung korrekt oder inkorrekt war. Bei Inkorrektheit wird die Message zum Message-Code zur\u00fcckgeliefert.<\/p>\n<p>Eine separate \u201cPr\u00fcf-Routine\u201d <em>getErrorMessages()<\/em> wird bei einem Post-Request oder Ajax-Call aufgerufen. Diese Methode iteriert durch das Array von Checks und \u00fcberpr\u00fcft die Werte zum vorher definierten Feld gegen die registrierten Methoden.<br \/>\nLiefert ein oder mehrere Checks einen Fehler, wird dieser zusammen gefasst und kann anschlie\u00dfend im Info-Bereich ausgegeben werden.<br \/>\nAlles in allem funktioniert das gar nicht so schlecht. Sogar der Method-Call ist absolut unproblematisch.<\/p>\n<p>Ich werde es jedoch noch ein wenig ausfeilen und melde mich demn\u00e4chst noch einmal.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nun sind ein paar Tage vergangen und ich bin schlauer\u2026. Die Smarty Form Validation-Engine ist zwar im Gro\u00dfen und Ganzen ganz n\u00fctzlich jedoch hat die bei der Validierung vom Webshop keine bzw. kaum gro\u00dfen Nutzen gehabt. Hintergrund ist, dass die meisten Calls im Webshop per AJAX erfolgen und ich partout keinen sinnvollen Weg gefunden habe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/47"}],"collection":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":1,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/47\/revisions"}],"predecessor-version":[{"id":48,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/47\/revisions\/48"}],"wp:attachment":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media?parent=47"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/categories?post=47"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/tags?post=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}