Es handelt sich um eine PHP-Bibliothek zum Abrufen und Validieren von Feldern sowie zum Speichern von Nachrichten in verschiedenen Containern (einschließlich Fehler, Warnung, Info und Erfolg), abhängig von den Bedingungen.
Die Ideologie hinter dieser Bibliothek ist einfach: 3 Klassen, einfache Abhängigkeiten und läuft in PHP 7.1 und höher, sodass sie praktisch in jedem PHP-Projekt ausgeführt werden kann, einschließlich WordPress, Laravel, Kern-PHP-Projekt usw.
Beispiele
Tutorial-Formular und Tabelle mit PHP
Es ist ein Beispiel für Funktionalität. Ein typisches Beispiel ist komplexer, auch wenn es nur ein paar Codezeilen umfasst.
Nehmen wir an, wir möchten einen Wert, einen Eingabewert namens „id“, validieren (get), dann könnten wir Folgendes tun:
use eftec ValidationOne ;
$ val = new ValidationOne ();
$ r = $ val -> def ( ' ERROR ' )
-> type ( ' integer ' )
-> ifMissingThenDefault ()
-> condition ( " eq " , " It's not equals to 10 " , 10 )
-> condition ( " eq " , " It's not equals to 30 (info) " , 30 , ' info ' )
-> ifFailThenDefault ()
-> get ( ' id ' ); // <-- end of the chain
Aber wo ist der Fehler? Die Nachrichten werden in messageList gespeichert
var_dump ( $ val -> messageList -> allArray ()); // here we show all messages of any kind of type.
var_dump ( $ val -> messageList -> errorCount ); // returns the number of errors.
var_dump ( $ val -> errorcount ()); // returns the number of errors (alternative)
var_dump ( $ val -> hasError ()); // returns true if there is an error.
Wir könnten jedoch auch eine Meldung nach Typ (Fehler, Warnung usw.) und nur nach einer bestimmten Kennung anzeigen.
var_dump ( $ val -> messageList -> get ( ' id ' )-> allErrorOrWarning ()); // All error or warning contained in the key "id".
Warum werden die Nachrichten in einer bestimmten Struktur gespeichert? Ist es nicht einfach, den Fehler einfach zurückzugeben?
Eine Antwort ist eine Form. Nehmen wir an, wir haben ein Formular mit drei Feldern. Wenn einer davon fehlschlägt, muss der Fehler für jedes Feld separat sichtbar sein. Außerdem könnte das gesamte Formular eine eigene Nachricht haben.
Der Anfang der Kette wird normalerweise am Ende des Codes geschrieben.
Die zulässigen Methoden sind:
Beispiel:
$ val = new ValidationOne ();
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> post ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> request ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> set ( ' 123 ' , ' id ' );
$ val = new ValidationOne ();
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' ); // $_GET['id']
$ val = new ValidationOne ( ' frm ' ); // we set a prefix for every reading.
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' ); // $_GET['frm_id']
Bedingung ($condition, $message = "", $conditionValue = null, $level = 'error', $key = null)
Es fügt eine Bedingung hinzu, dass es von der Art der Eingabe abhängt.
@param string $condition
Zahl :req,eq,ne,gt,lt,gte,lte,between,null,notnull
Zeichenfolge :req,eq,ne,minlen,maxlen,betweenlen,null,notnull,contain,notcontain ,alpha,alphanum,text,regexp,email,url,domain
Datum :req,eq,ne,gt,lt,gte,lte,between
Datumszeichenfolge :req,eq,ne,gt,lt,gte,lte,between
boolean :req,eq,ne,true,false
Datei :minsize,maxsize,req,image,doc,compression,architecture,ext
Funktion:
fn.static.Class.methodstatic
fn.global.function
fn.object.Class.method, wobei Objekt ein globales $object ist
fn.class.Class.method
fn.class.namespaceClass.method
@param string $message
Die Nachricht könnte die nächsten Variablen „%field“, „%realfield“, „%value“, „%comp“, „%first“, „%second“ verwenden.
Feld | Beschreibung | Beispiel |
---|---|---|
%Feld | Name des Feldes, es könnte die Freundes-ID oder der tatsächliche Name sein | Kunden-ID |
%realfield | Name des Feldes (nicht die Friendid ) | Kunden-ID |
%Wert | aktueller Wert des Feldes | John |
%comp | zu vergleichender Wert (falls vorhanden) | |
%Erste | erster zu vergleichender Wert (wenn der Vergleichswert ein Array ist) | |
%zweite | zweiter zu vergleichender Wert (wenn der Vergleichswert ein Array ist) | |
%Schlüssel | Verwendeter Schlüssel (für Eingabearray) |
@param null $conditionValue
@param string $level (Fehler, Warnung, Info, Erfolg). Der Grad des Fehlers. Weitere Informationen finden Sie unter MessageContainer
@param string $key Wenn der Schlüssel nicht null ist, wird er verwendet, um mehr als eine Bedingung pro Schlüssel hinzuzufügen
@return ValidationOne
Hinweis: Wenn der Wert null ist und isNullValid() wahr ist, werden die Bedingungen ignoriert. Wenn der Wert fehlt und isMissingValid() wahr ist, werden die Bedingungen ignoriert. Wenn der Wert leer ist ('') und isEmptyValid() wahr ist, werden die Bedingungen ignoriert. Wenn der Wert leer ('') oder null ist und isNullOrEmptyValid() wahr ist, werden die Bedingungen ignoriert. isNullValid(),isMissingValid(),isNullOrEmptyValid() und isEmptyValid() sind nützlich, wenn wir einen Wert nur dann validieren möchten, wenn er existiert oder wenn der Wert festgelegt ist.
Beispiel:
$ validation -> def ( null )
-> type ( ' integer ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 60 )
-> set ( ' aaa ' , ' variable2 ' );
Typ | Beschreibung |
---|---|
ganze Zahl | (numerisch) erlaubt eine Zahl ohne Dezimalzahl |
Unixzeit | (numerisch) erlaubt eine Zahl ohne Dezimalzahl |
Boolescher Wert | (boolean) Es speichert wahr oder falsch. Die Eingabe kann variieren (leer, null oder null = falsch, sonst wahr) |
dezimal | (numerisch) erlaubt eine Zahl mit Dezimalzahl |
schweben | (numerisch) erlaubt eine Zahl mit Dezimalzahl |
Varchar | (String) erlaubt jede Eingabe |
Zeichenfolge | (String) erlaubt jede Eingabe |
Datum | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als Objekt DateTime gespeichert |
Datum/Uhrzeit | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als Objekt DateTime gespeichert |
Datumszeichenfolge | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als String gespeichert |
Datum/Uhrzeitzeichenfolge | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als String gespeichert |
Datei | (Datei) Die Eingabe ist eine Zeichenfolge und wird als Zeichenfolge gespeichert, fügt jedoch eine spezielle Validierung hinzu |
Eingabetyp | Zustand | |
---|---|---|
Nummer | gt,lt,gte,lte,zwischen | |
Zeichenfolge | minlen,maxlen,betweenlen,contain ,notcontain,alpha,alphanum,text,regexp,email,url,domain | |
Datum | gt,lt,gte,lte,zwischen | |
Datumszeichenfolge | gt,lt,gte,lte,zwischen | |
Boolescher Wert | wahr, falsch | |
Datei | minsize,maxsize,req,image,doc,compression,architecture,ext | |
* (gilt für jeden Typ) | req,eq,ne,null,notnull,empty,notempty | |
* | Funktion | |
* | fn.static.Class.methodstatic | |
* | fn.global.function | |
* | fn.object.Class.method, wobei Objekt ein globales $object ist | |
* | fn.class.Class.method | |
* | fn.class.namespaceClass.method |
Zustand | Beschreibung | Wertbeispiel |
---|---|---|
Architektur | Die Erweiterung der Datei muss eine Architekturdatei (DWG usw.) sein. | |
zwischen | Die Zahl muss zwischen zwei Werten liegen | [0,20] |
zwischenlen | Die Länge des Textes muss zwischen zwei Werten liegen | [0,20] |
Kompression | Die Erweiterung der Datei muss eine Komprimierungsdatei sein | |
enthalten | Der Text muss einen Wert enthalten | "Text" |
Dok | Die Erweiterung der Datei muss eine Dokumentdatei sein | |
eq (es könnte ein Array oder ein Wert sein) / == | Der Wert muss gleich sein Der Wert muss in einem Array enthalten sein | „text“,[„text“, „text2“] |
existieren | Die Datei oder der Wert muss vorhanden sein (sie könnte null/leer sein) | |
fehlt / ist nicht vorhanden | Die Datei oder der Wert darf nicht vorhanden oder null/leer sein | |
erforderlich (oder erforderlich) | Der Wert darf nicht null oder leer sein | |
ext | Die Erweiterung (Datei) muss in der Liste der Erweiterungen enthalten sein | ["ext1", "ext2", "ext3"] |
FALSCH | Der Wert muss falsch sein (===false) | |
fn.class.namespaceClass.method | Die Methode einer Klasse muss true zurückgeben | |
fn.class.Class.method | Die Methode einer Klasse muss true zurückgeben | |
fn.global.function | Die globale Funktion muss true zurückgeben | |
fn.object.Class.method, wobei Objekt ein globales $object ist | Die Methode eines globalen Objekts muss true zurückgeben | |
fn.static.Class.methodstatic | Die statische Methode einer Klasse muss true zurückgeben | |
Funktion | Die Funktion muss true zurückgeben | |
gt / > | Der Wert muss größer sein als | 123 |
gte / >= | Der Wert muss größer oder gleich sein | 123 |
Bild | Die Erweiterung der Datei muss eine Bilddatei sein | |
lt / < | Der Wert muss kleiner sein als | 123 |
lte / <= | Der Wert muss kleiner oder gleich sein | 123 |
maxlen | Die maximale Länge einer Zeichenfolge | 123 |
maximale Größe | Die maximale Größe einer Datei | 123 |
minlen | Die Mindestlänge einer Zeichenfolge | 123 |
Mindestgröße | Die Mindestgröße einer Datei | 123 |
mime (der zu vergleichende Wert könnte ein String oder ein Array sein) | Der MIME-Typ einer Datei | „application/msword“ oder [„application/msword“, „image/gif“] |
Mimetyp | Der MIME-Typ (ohne Subtyp) einer Datei | „Anwendung“ oder [„Anwendung“, „Bild“] |
ne / != (der zu vergleichende Wert kann ein einzelner Wert oder ein Array sein) | Der Wert darf nicht gleich sein. Oder der Wert darf nicht in einem Array enthalten sein | 123,[123,345],["aa","bb"] |
nicht enthalten | Der Wert darf keinen Wert enthalten | "Text" |
nichtnull | Der Wert darf nicht null sein | |
null | Der Wert muss null sein | |
leer | Der Wert muss leer sein (z. B. „“,0,null) | |
nichtleer | Der Wert darf nicht leer sein (d. h. nicht gleich „“,0,null) | |
erf | Der Wert muss vorhanden sein | |
WAHR | Der Wert muss wahr sein (===wahr) |
Beispiele:
$ validation -> def ( null )
-> type ( ' integer ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' between ' , ' %field %value must be between 1 and 50 ' ,[ 1 , 50 ])
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 60 )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' ,[ 60 , 200 ]) // eq allows a single or array
-> condition ( ' fn.static.Example.customval ' , ' the function does not work ' )
-> condition ( ' req ' )
-> condition ( ' lt ' , " es muy grande " , 2000 , ' warning ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' fn.static.Example.fnstatic ' , ' the static function does not work ' )
-> condition ( ' fn.static.somespaceSomeclass.methodStatic ' , null )
-> condition ( ' fn.global.customval ' , ' The global function does not work ' )
-> condition ( ' fn.object.example.fnnostatic ' , ' the function object does not work ' )
-> condition ( ' fn.class.somespaceSomeclass.method ' , ' The function some class does not work ' )
-> condition ( ' fn.class.Example.fnnostatic ' , ' la funcion class no funciona ' );
// ->condition('fn.static.Example.customval','la funcion no funciona')
function customval ( $ value , $ compareValue ) {
return true ;
}
Manchmal müssen wir eine benutzerdefinierte Bedingung verwenden. Wir könnten eine globale Variable, eine statische Funktion oder sogar eine Methode innerhalb einer Klasse erstellen.
Jede erstellte Methode oder Funktion muss zwei Parameter (mit beliebigem Namen) haben:
Was ist beispielsweise, wenn wir auswerten müssen, ob eine ID in der Datenbank nicht vorhanden ist?
$ validation -> condition ( ' fn.global.idExist ' , ' The id already exist! ' )-> get ( " id " );
function idExist ( $ id , $ compare = null ) {
// select count(*) c from table where id=$id
if ( $ c > 0 ) {
return true ;
} else {
return false ;
}
}
Hinweis: Wenn wir einen Namespace angeben müssen, können wir die Notation verwenden: namespaceSomeClass
$ validation -> condition ( ' fn.global.customfn ' ); // global
$ validation -> condition ( ' fn.static.SomeClass.staticfn ' ); // calling a static method inside the class SomeClass.
$ validation -> condition ( ' fn.class.SomeClass.noStaticFn ' ); // method inside a class,it creates an instance of an object then it calls the method
$ validation -> condition ( ' fn.object.myObject.noStaticFn ' ); // method inside a class, it uses an instance called $myObject
// global function
function customfn ( $ value , $ compareValue ) {
// returns true or false
}
// static function
$ myObject = new SomeClass ();
class SomeClass {
public static function staticfn ( $ value , $ compareValue ) {
// returns true or false
}
public function noStaticFn ( $ value , $ compareValue ) {
// returns true or false
}
}
Wenn wir ein Objekt validieren, kann es die Informationen im Nachrichtencontainer (auch Nachrichtenliste genannt) speichern.
MessageContainer (EFTEC/MessageContainer) enthält eine hierarchische Liste von Nachrichten:
Container (usually only 1 for all the project)
Lockers (from zero to many)
Messages (from zero to many and grouped by level)
$ container -> get ( ' locker20 ' )-> firstError (); // it returns the first message of error in the locker20 that is part of the container.
Nachrichten werden wie folgt nivelliert
Ausweis | Beschreibung | Beispiel |
---|---|---|
Fehler | Die Meldung ist ein Fehler und muss behoben werden. Es ist unser Showstopper. | Die Datenbank ist ausgefallen |
Warnung | Die Meldung ist eine Warnung, dass sie möglicherweise ignoriert werden kann. Die Klasse MessageContainer ermöglicht jedoch die gemeinsame Gruppierung von Fehlern und Warnungen. | Die Registrierung wurde gespeichert, jedoch mit Warnungen |
Info | Die Nachricht ist Information. Zum Beispiel, um einen Vorgang zu protokollieren oder zu debuggen. | Protokoll wird gespeichert |
Erfolg | Die Meldung lautet, dass der Vorgang erfolgreich war | Bestellung angenommen |
Funktion | Beschreibung | Beispiel |
---|---|---|
addMessage($idLocker, $message, $level = 'error') | Es fügt eine Nachricht in einem Schließfach hinzu. Normalerweise erfolgt dies automatisch durch die Bibliothek, Sie können Nachrichten jedoch auch manuell per Code hinzufügen. | $this->addMessage('pwd','das Passwort ist erforderlich','error'); |
getMessage($withWarning = false) | Es wird die erste Fehlermeldung angezeigt oder leer, wenn keine vorhanden ist | $this->getMessage(); |
getMessages($withWarning = false) | Es werden alle Fehlermeldungen angezeigt oder leer, wenn keine vorhanden sind | $this->getMessages(); |
getMessageId($idLocker) | Es erhält ein MessageLocker- Objekt (weitere Informationen finden Sie unter EFTEC/MessageContainer). | $obj=$this->getMessageId('pwd'); |
errorCount(includeWarning=false) | Es erhält die Fehleranzahl | $count=$this->errorCount(); |
hasError($includeWarning=false) | Es gibt true zurück, wenn ein Fehler vorliegt | $fail=$this->hasError(); |
Feld | Beschreibung | Beispiel |
---|---|---|
$messageList | Es bekommt den ganzen Container. Es gibt ein Objekt vom Typ MessageContainer zurück | $container=$this->messageList; |
Weitere Informationen zu MessageContainer finden Sie in EFTEC/MessageContainer
Beispiel:
$ validation -> addMessage ( ' idlocker ' , ' this field is required ' , ' error ' ); // it adds a message inside a locker.
$ validation -> messageList -> get ( ' idlocker ' )-> allError (); // it gets all errors from the locker idlocker
$ validation -> getMessages ( true ); // it gets all messages of error or warning from all the lockers.
Wir könnten auch mit Daten arbeiten. Es gibt verschiedene Arten von Datumsformaten.
Typ | Beschreibung |
---|---|
Datum | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als Objekt DateTime gespeichert |
Datum/Uhrzeit | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als Objekt DateTime gespeichert |
Datumszeichenfolge | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als String über das Feld $dateOutputString gespeichert |
Datum/Uhrzeitzeichenfolge | (Datum) Die Eingabe könnte eine DateTime oder eine Zeichenfolge sein. Der Wert wird als String über das Feld $dateLongOutputString gespeichert |
Es gibt zwei Möglichkeiten, das Datumsformat anzugeben: kurz (nur Datum) und lang (Datum und Uhrzeit). Und wir könnten das Format als Eingabe und Ausgabe angeben.
Namensfeld | Beschreibung | Standardwert |
---|---|---|
$dateShort | Es ist das (erwartete) Eingabeformat für Datum (kurz) | d/m/j |
$dateLong | Es ist das (erwartete) Eingabeformat (mit Datum und Uhrzeit) | d/m/YH:i:s |
$dateOutputString | Es ist das Ausgabeformat (für Datumszeichenfolge) | Ymd |
$dateLongOutputString | Es ist das Ausgabeformat (für datetimestring) | YmdTH:i:sZ |
$ r = getVal ()-> type ( ' datestring ' )-> set ( ' 31-12-2019 ' ); // 2019-12-31 note: the default input value is d/m/Y, not m/d/Y
Wir können das Datumsformat ändern, indem wir die Felder ändern oder die nächsten Funktionen aufrufen
Festlegen des Formats der Datumsangaben (Eingabe kurz, Eingabe lang, Ausgabe kurz und Ausgabe lang)
$ validation -> setDateFormat ( ' m/d/Y ' , ' m/d/Y H:i:s ' , ' Y-m-d ' , ' Y-m-dTH:i:sZ ' )
Wir stellen das Format der Datumsangaben auf die Standardkonfiguration ein
$ validation -> setDateFormatDefault ();
Wir stellen das Datumsformat auf Folgendes ein:
Name | Format |
---|---|
Eingang kurz | m/d/j |
Eingabe lang | m/d/YH:i:s |
Ausgang kurz | Ymd |
Ausgabe lang | YmdTH:i:sZ |
$ validation -> setDateFormatEnglish ()
Standardmäßig generiert diese Bibliothek keine Ausnahmen. Es ist jedoch möglich, Ausnahmen zu generieren, wenn die Meldung vom Typ ERROR und/oder WARNING ist.
Wenn bei dieser Methode der Container einen Fehler generiert, wird beim Speichern auch eine neue Ausnahme generiert.
Hinweis: Standardmäßig sind die meisten Meldungen vom Typ FEHLER.
Hinweis: Wenn der Operator throw ist, wird der Wert nicht zugewiesen und der Stapel gelöscht. Wenn wir also eine Ausnahme auslösen, gehen alle Informationen verloren.
try {
$ validation -> type ( ' integer ' )
-> throwOnError () // for errors only
-> set ( ' hello ' , ' field1 ' );
// or you could use:
$ validation -> type ( ' integer ' )
-> throwOnError ( true , true ) // for errors and warnings
-> set ( ' hello ' , ' field1 ' );
$ this -> fail ( ' this value means the throw failed ' );
} catch ( Exception $ ex ) {
$ this -> assertEquals ( ' field1 is not numeric ' , $ ex -> getMessage ());
}
In dieser Bibliothek gibt es vier verschiedene Möglichkeiten, mit leeren Werten umzugehen.
$ validation -> exist ()-> set ( null ); // is valid.
$ validation -> exist ()-> set ( '' ); // is valid.
$ validation -> exist ()-> get ( ' field ' ); // is valid only if $_GET['field'] exist (even if it is null)
$ validation -> required ()-> set ( null ); // is not valid.
$ validation -> required ()-> set ( "" ); // is not valid.
$ validation -> required ()-> set ( ' hi ' ); // is valid.
$ validation -> notnull ()-> set ( null ); // is not valid.
$ validation -> notnull ()-> set ( "" ); // is valid.
$ validation -> notnull ()-> set ( ' hi ' ); // is valid.
$ validation -> notempty ()-> set ( null ); // is valid.
$ validation -> notempty ()-> set ( "" ); // is not valid.
$ validation -> notempty ()-> set ( ' hi ' ); // is valid.
Außerdem gibt es vier Möglichkeiten, fehlende Werte, null oder leer, zu akzeptieren und dabei alle Bedingungen zu umgehen.
$ validation -> isNullValid ()-> condition (... . )-> set ( null ); // is valid no matter the condition.
$ validation -> isNullorEmptyValid ()-> condition (... . )-> set ( null ); // is valid no matter the condition.
$ validation -> isEmptyValid ()-> condition (... . )-> set ( '' ); // is valid no matter the condition.
$ validation -> isMissingValid ()-> condition (... . )-> get ( ' field ' ); // If the field is missing, then is valid no matter the condition
Es wird verwendet, wenn wir überprüfen müssen, ob eine Eingabe einen Wert hat, es sei denn, der Wert fehlt, ist leer oder null.
isNullorEmptyValid() ist gleich wie der Aufruf: isEmptyValid()->isNullValid()
Außerdem könnten diese Operatoren gestapelt werden.
$ validation
-> isNullorEmptyValid ()
-> isMissingValid ()
-> condition (... . )
-> set (... . ); // this expression is valid if the value is null, empty(''), the value is missing, no matter the conditions.
Wir könnten einen Standardwert festlegen. Dieser Wert kann als Ersatzwert dienen, wenn ein Fehler auftritt. Der Standardwert wird nie konvertiert oder verarbeitet.
$ validation
-> def (- 1 )
-> type ( ' integer ' )
-> ifFailThenDefault ()
-> set (...); // if the operation fails, then it returns -1
Trimmen Sie das Ergebnis. Standardmäßig wird das Ergebnis nicht gekürzt. Sie können die linke, rechte oder beide Seiten beschneiden. Zur Durchführung der Operation wird die Methode „convert()“ verwendet.
$ validation -> trim ()-> set (... . ); // trim both sided
$ validation -> trim ( ' trim ' , ' ., ' )-> set (... . ); // trim . and ,
$ validation -> trim ( ' ltrim ' )-> set (... . ); // trim left sided
$ validation -> trim ( ' rtrim ' )-> set (... . ); // trim right sided
Manchmal möchten wir die Ergebnisse immer beschneiden. Wir könnten diese Methode also verwenden, um das Ergebnis immer zu kürzen. Es wird am Ende der Konvertierung gestapelt.