{"id":45,"date":"2009-05-14T20:56:14","date_gmt":"2009-05-14T20:56:14","guid":{"rendered":"http:\/\/devblog.cssec.de\/?p=45"},"modified":"2018-11-13T21:28:33","modified_gmt":"2018-11-13T21:28:33","slug":"smarty-validation","status":"publish","type":"post","link":"https:\/\/www.cssec.de\/blog\/2009\/05\/14\/smarty-validation\/","title":{"rendered":"Smarty Validation"},"content":{"rendered":"<p>Ich habe zuf\u00e4llig 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.<br \/>\nOb das am Ende stimmt ist noch offen. Auf alle F\u00e4lle habe ich es einmal installiert, leider ist die Dokumentation von dem Plugin eher bescheiden.<\/p>\n<p>Nichts desto Trotz ist die Philosophie gar nicht so schlecht, auch wenn man da wahrscheinlich etwas besser h\u00e4tte machen k\u00f6nnen.<\/p>\n<p>Immerhin gibt es einen Ansto\u00df zu der Idee, entweder ein eigenes Framework zu integrieren oder zumindest meinen Code soweit anzupassen, dass die Validation auf vern\u00fcnftige Weise genutzt werden kann.<\/p>\n<p>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\u00fcrlich ins Unterverzeichnis \u201cplugins\u201d.<\/p>\n<p>Nun ein paar Hinweise, um das Plugin sinnvoll zu integrieren:<\/p>\n<pre lang=\"php\">require_once('lib\/SmartyValidate.class.php')<\/pre>\n<p>zur Integration des Validators in das PHP-File.<\/p>\n<pre lang=\"php\">session_start()<\/pre>\n<p>unbedingt aufrufen, damit SmartyValidator genutzt werden kann. Irgendwie speichert der n\u00e4mlich alle Validations in der Session.<\/p>\n<p>bei jedem get wird ein<\/p>\n<pre lang=\"php\">SmartyValidate::connect($smarty,\u00a0true)<\/pre>\n<p>gemacht. Nat\u00fcrlich darauf achten, dass smarty vorher initialisiert ist.<br \/>\nDurch das Beispiel hab ich auch gleich gelernt, dass<\/p>\n<pre lang=\"php\">empty($_POST)<\/pre>\n<p>dazu genutzt werden kann, um zwischen GET und POST-Modus zu unterscheiden.<br \/>\nF\u00fcr alle Felder, die im Form genutzt werden, wird der Befehl:<\/p>\n<pre lang=\"php\">SmartyValidate::register_validator('validateId','FeldId','validationArt')<\/pre>\n<p>aufgerufen werden. Optional k\u00f6nnen noch weitere Parameter angegeben werden, um mehrfache Validierungen zu ein und dem gleichen Feld zuzulassen z.B. ist der 4. Parameter zur Pr\u00fcfung auf leere Felder gedacht (true setzen).<\/p>\n<p>Beim Post bzw. in der Ajax-Funktion muss wiederum ein<\/p>\n<pre lang=\"php\">SmartyValidate::connect($smarty)<\/pre>\n<p>diesmal ohne zweiten Parameter durchgef\u00fchrt werden. Anschlie\u00dfend k\u00f6nnen mit<\/p>\n<pre lang=\"php\">if\u00a0(SmartyValidate::is_valid($_POST)\u00a0)\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SmartyValidate::disconnect();\r\n\u00a0\u00a0else\r\n\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$smarty->assign($_POST);\r\n\u00a0\u00a0}<\/pre>\n<p>die Fehlermeldungen ausgegeben werden, wenn denn welche da sind. Das<\/p>\n<pre lang=\"php\">$smarty->assign($_POST)<\/pre>\n<p>macht dann anscheinend die Fehleranzeige.<\/p>\n<p>In den Templates selbst kann mit<\/p>\n<pre lang=\"php\">{validate\u00a0id=\"name\"\u00a0message=\"Benutzername\u00a0muss\u00a0eingegeben\u00a0werden\"}<\/pre>\n<p>die Validierung initialisiert und der Validierung eine Message zugeordnet werden.<\/p>\n<p>F\u00fcr mich ist noch fraglich inwieweit dieser Mechanismus auf Ajax angewendet werden kann, da im Falle von Ajax ja kein $_POST gesendet wird. Au\u00dferdem wird vermutlich die Logik der Anzeige im roten und gr\u00fcnen Balken nicht immer funktionieren, vor allem dann nicht, wenn Unterseiten verschiedene Auspr\u00e4gungen haben (z.B. Account &#8211; je nachdem, ob Privatkunde oder Firmenkunde).<\/p>\n<p>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\u00fcfungsart jeweils eine Message bei Fehler generiert und in Form eines globalen Errortextes zur\u00fcckliefert.<br \/>\nDazu jedoch sp\u00e4ter.<\/p>\n<p>Ich werde noch einmal genauer evaluieren inwieweit die SmartyValidate-Klasse mir genauer helfen kann. Auf alle F\u00e4lle ist die Idee einer globalen Pr\u00fcfung gar nicht so schlecht. Zumindest spart man sich da viel Schreibarbeit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe zuf\u00e4llig 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\u00e4lle habe ich es einmal installiert, leider ist die Dokumentation von dem Plugin eher bescheiden. Nichts desto Trotz ist [&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\/45"}],"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=45"}],"version-history":[{"count":3,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions"}],"predecessor-version":[{"id":61,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions\/61"}],"wp:attachment":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media?parent=45"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/categories?post=45"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/tags?post=45"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}