Was ist ein guter Ansatz mit sich wiederholende und langwierige Validierungscodes auf den Umgang?

StackOverflow https://stackoverflow.com/questions/1419619

  •  07-07-2019
  •  | 
  •  

Frage

Ich habe erst vor kurzem Web-Programmierung begonnen und ich bin ziemlich erstaunt, dass, obwohl ich eine Validierung Bibliothek verwenden, bekomme ich immer noch 20 bis 30 Zeilen Code für die Validierung allein, keine Fehlermeldungen und Callback-Funktionen zählen. Ich bin mit dem Kohana MVC-Framework, und ich frage mich, ob es irgendeine Art und Weise war ich meinen Validierungscodes verkürzen. Ich habe versucht, die folgenden denken

  1. Validierungscodes in meinem Modell setzen (was durchaus für ein Noob wie ich ist).
  2. eine wirklich kleine Bibliothek Erstellen von Einträgen zu validieren (etwas, das an die Prüfklasse Haken, so dass mir die Bibliothek für sich wiederholende Prozeduren wie die Benutzerregistrierung, Bearbeitung und Sachen nennen)

Oder gibt es bessere und effizientere Wege?

War es hilfreich?

Lösung

würde ich empfehlen auf, einschließlich der Validierung des Modells arbeiten. Sobald Sie in der Lage sind, eine zu tun, alle anderen Sie erstellen, wird viel einfacher. Plus, wenn Sie mehrere Controller haben versucht, diese Daten zu speichern, werden Sie nicht brauchen die Validierung neu zu kodieren. Die Kohana docs einige Beispiele enthalten, die für die Integration der Validierung Bibliothek und ORM, Sie sollten dort beginnen.

Andere Tipps

Ich verwende Zend_Validate mit Zend_Forms für die Validierung, in dem der Validierungscode ist in den Formen Methode init. Alles, was ich tun muß, ist eine Reihe von Validatoren für jedes Element und als Lauf passieren ..

$form->isValid($data);

... außerhalb des Formulars der Daten zu überprüfen.

Die Validierung Array ist leicht mehr als 30 Zeilen, weil ich jeden Array-Eintrag mit einem Newline trennen. Aber ich denke, Sie haben, wenn Sie definieren feinkörniges Validierungsregeln für jedes Element rechts.

Und es ist wirklich einfach, neue Validatoren in Zend zu definieren.

edit: ich entdeckte einen Rahmen, der die Zend Framework erstreckt, die Domain-Objekte erlaubt eine eigene Validierung enthält. Sein genannt Xyster Rahmen, aber ich kann es nicht bekommen auf dem ersten Versuch zu arbeiten, so habe ich nicht danach versucht.

Hier ist meine Strategie mit Validierungscode für den Umgang. Ich nehme von ‚Validierung Bibliothek‘, meinst du solche, die nur eine E-Mail stellen Sie sicher, eine E-Mail ist, Telefonnummern sind numerische und sind nicht von Geschäftsregeln in der Natur.

Die Idee ist es, jeden Geschäftsregel-Code als Funktor zu haben - wenn es PHP ist, können Sie erhalten, indem nur eine Zeichenfolge mit der Funktion zu definieren; für andere Sprachen, können Sie die Strategie-Muster verwenden. Definieren Sie eine Schnittstelle für den Funktor (nicht erforderlich, PHP) und Dump es in ein Array.

Ausführen durch die Anordnung, die den Erfolg zurück, Fehler und einen Fehlercode in einen Puffer. Am Ende untersucht den Fehlerpuffer und bestimmen, welche die Validierung fehlgeschlagen ist. Verwenden Sie es, die Ansicht anzupassen.

Hier ist ein Beispiel

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

Am Ende erhalten Sie eine Ergebnis-Reihe, die jeweils mit einem Validierungsprozess gefüllt, und Sie wissen, welche ausgefallen ist, und welches nicht. Dies kann dann auf die Client-Seite zur weiteren Verarbeitung übergeben werden, wie die ausgefallenen Felder hervorheben. Die error_code ein verwendet werden, um die richtige Fehlermeldung zu sehen und Formatierung auf sie angewendet.

Ich bin nicht wirklich sicher, was Sie aber durch Rückrufe bedeuten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top