Ein Eingabe -Validierungs -Framework mit einem langweiligen Namen
Changelog
Die Eingabeteilung ist eine wichtige Aufgabe in jeder Webanwendung, bleibt jedoch eine äußerst mühsame Aufgabe. Dies ersetzt vermischte Überprüfungen durch eine ordnungsgemäße Datenstruktur, die die erforderlichen und optionalen Eingaben deutlich definiert.
Das Design erregt sich um die Idee des API-gesteuerten Designs, wobei jeder API-Endpunkt ein eigenes Objekt ist, dieses Format jedoch nicht explizit erfordert
Die Roheingabe wird in zwei primären Schritten in sichere Daten umgewandelt:
Das Parsing ist für die Umwandlung der Roheingangszeichenfolge in ein assoziatives Array verantwortlich. Wenn Ihre Anwendung darauf strukturiert ist, kann dieser Schritt vollständig übersprungen werden.
Die Validierung ist der nützlichste Teil der Bibliothek - ein definierter Satz optionaler und erforderlicher Parameter und deren Typen und Vergleich der Eingabewerte mit der Spezifikation. Die Implementierung verhindert, dass ungültige Daten vollständig propagiert werden. Es ist nicht möglich, ein SafeInput -Objekt (das Ihre Anwendung verwendet) aus ungültigen Daten zu erstellen!
Nach Abschluss dieses Prozesses wird ein SafeInput -Objekt zurückgegeben, das Daten gemäß der Spezifikation enthält, die durch das Objekt implementiert wird, ValidationInterface implementiert (fehlende optionale Werte sind null).
Da diese Bibliothek vorhanden ist, um vertrauenswürdige Daten zu liefern, wird sie aktiv daran hindern, sie zu tun. Beispielsweise bringt die Verwendung isset oder empty in der Datenstruktur eine Ausnahme. Es ist die Erfahrung des Autors, dass das Handeln nicht in der Lage ist, Ihren validierten Daten zu vertrauen, ein Anti-Muster- und Code-Geruch ist. Wenn Sie darauf bestehen, ist dies nicht das richtige Werkzeug für Sie. Das Erzwingen eines solchen Vertrauens verhindern dazu, dass die Dokumentation von der Realität abgehalten wird.
Ein grundlegendes Beispiel folgt:
some_controller_file.php
<?php
// This would be in its own file
use Firehed Input Interfaces ValidationInterface ;
use Firehed Input Containers SafeInput ;
use Firehed Input Objects as O ;
class Endpoint
implements ValidationInterface {
public function getOptionalInputs () {
return [
' bar ' => new O Text (),
' baz ' => ( new O Text ())-> setDefaultValue ( ' my baz ' ),
];
}
public function getRequiredInputs () {
return [
' foo ' => new O Text (),
];
}
public function execute ( SafeInput $ i ) {
// ... do some magic
// $i['foo'] will be a string
// $i['bar'] will be a string or null, since it was optional
// $i['baz'] will be a string or 'my baz', since it was an optional with a default value
}
} index.php
<?php
// This is the core of your Front Controller
use Firehed Input Containers RawInput ;
use Firehed Input Parsers URLEncoded ;
// The endpoint should be detrmined by your router
$ endpoint = new Endpoint ();
// The parser should be determined by the Content-Type header
$ parser = new URLEncoded ();
try {
$ input = ( new RawInput ( " foo=world " ))
-> parse ( $ parser )
-> validate ( $ endpoint );
$ endpoint -> execute ( $ input );
} catch ( Firehed Input Exceptions InputException $ e ) {
// The input contained invalid data
} catch ( Exception $ e ) {
// Do any logging, error responses, etc.
echo $ e ;
}