- Antwort
- Tuesday, July 10th, 2007 at 8:47:27am MDT
- Hallo timi,
- Anmerkung: Ich würde an deiner Stelle einen Unterordner erstellen, in welchem sich die Plugins befinden. Man kann schlecht unterscheiden, was von den Dateien zur Validierungsklasse gehört und was ein "Plugin" ist. Nicht immer werden alle Plugins benötigt. Jedes Plugin zu inkludieren kostet Zeit. Besser wäre es, in formvalidation.inc.php an eine Funktion einen Array mit allen benötigten Plugins übergeben. Am besten wäre es, wenn check() automatisch erkennen würde, welches Plugin benötigt wird. Das ist leider nicht möglich, weil du requireField() als zweiten Parameter ein Objekt übergibst. Die Parameter der Klassenaufrufe sind ja nicht immer gleich, also wäre eine leichtere Möglichkeit auf Klassen als Plugins zu verzichten und einen Array als zweiten Parameter zu übergeben. Der Array enthält folgendes:
- Element #0: Validierungsmethode (z. B. RULE_FIELD_FILLED)
- Element #1: Parameter 1
- Element #2: Parameter 2 (optional)
- Element #3: Parameter 3 (optional)
- ...
- Ich würde ein Plugin wie folgt aufbauen:
- <?php
- //Dateiname: plugins/fieldUsername.class.php
- //Es werden keine Klassen verwendet, um die Funktion über call_user_func() aufzurufen.
- function checkFieldFilled($fieldContent)
- {
- }
- ?>
- Eigene Validierungsmethoden fügt man über addRule() hinzu. Der erste Parameter enthält einen Namen, der später als Konstante verwendet wird (z. B. RULE_FIELD_FILLED). Der zweite Parameter ist der Funktionsname.
- function addRule($name, $funcName)
- {
- }
- So würde ich mir die Klasse vorstellen:
- <?php
- require_once('formValidation.class.php');
- $pruefung = new formValidation('kontaktformular');
- $pruefung->requireField("Nachname", array(RULE_FIELD_FILLED), "Bitte geben Sie einen Nachnamen ein.");
- //eigene Funktion hinzufügen
- function checkEMail()
- {
- //...
- }
- $pruefung->addRule('RULE_CHECK_EMAIL', 'checkEMail'); //deklariert RULE_CHECK_EMAIL
- $pruefung->requireField("EMail", array(RULE_CHECK_EMAIL), "Bitte geben Sie eine gülte E-Mail Adresse ein.");
- //check() durchläuft z. B. über foreach() das Array. Für jede Iteration wird call_user_func_array() mit dem Funktionsnamen aufgerufen
- //(2. Parameter, 1. Element von requireField()) und als ersten Parameter den Feldwert und als zweiten, dritten, usw. Parameter werden
- //die restlichen Elemente von dem 2. Parameter von requireField() verwendet (also das Array mit den Rules).
- if ($pruefung->check())
- {
- ...
- }
- else
- {
- ...
- }
- ?>
- Ich würde dir empfehlen, so viel Singlequotes, wie möglich zu verwenden (Doublequotes sind langsamer). Du verwendest in deinen Codes oft HTML Elemente. Es wäre sinnvoller, diese nicht "hardcoded" zu schreiben, sondern bspw. als Konstante zu definieren (Standardwert), dessen Inhalt verwendet wird, wenn über kein benutzerdefinierter Wert (z. B. über eine Funktion) gesetzt worden ist. Ich verwende absichtlich nicht $_GET, $_POST, $_REQUEST, $_COOKIE, etc. in allen meiner Klassen, weil, wie in deinem Fall, man eigene Arrays hätte überprüfen wollen. $_GET, $_POST, $_REQUEST, usw. funktionieren nicht, wenn man das PHP Script als Commandline Anwendung geschrieben hat.
- Gruß
- Tim
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.