Validierungen über eine Klasse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Validierungen über eine Klasse

    Hallo.
    Ich eröffne kurz einen neuen Thread, weil er eher nicht zum vorherigen passt.
    Ich habe mich über OOP informiert und wollte bei euch einmal "anfragen",
    wie Ihr eine Validierung zusammenfasst.

    Eine einzelne Validierung ist kein Problem.
    Wenn jedoch mehrere Validierungen durchgeführt und die evtl. Fehlermeldungen zusammen ausgegeben werden.

    Wie setze ich die Klassen dann am besten ein?
    Eine Hauptklasse, z.B. allgemeine_validierung
    welche ein neues Objekt als Parameter mitbekommt,
    dieses Objekt zur Prüfung nutzt und die evtl. Fehlermeldung des Objektes bzw. der mehreren Objekte in der allgemeinen_validerung Klasse zusammenfügt und gemeinsam ausgibt.

    Dann werden die direkten Prüfungsklassen extends allgemeine_validierung bezogen programmiert.

    Jedoch, wie soll die allgemeine_validierung die Fehlermeldungen speichern?
    Einfach in einer Array?
    Oder jedes Objekt nochmals durchlaufen und ausgeben?

    Danke

  • #2
    Ich hoffe, jemand versteht meine Beweggründe

    Ein Beispiel woran ich gerade bastel (funktioniert nur noch nicht, warum auch immer )
    PHP-Code:
    <?php

    class validierung
    {
        var 
    $error_msg;

        function 
    validierung()
        {
            
    $this->error_msg = array();
        }

        function 
    validierung_string($object$error_msg)
        {
            if(
    $object == false)
            {
                echo 
    $error_msg;
            } else {
                echo 
    "TRUE";
            }
        }
    }

    class 
    lenght_min_max extends validierung
    {
        var 
    $mystring;
        var 
    $min_lenght;
        var 
    $max_lenght;

        function 
    lenght_min_max($mystring$min_lenght$max_lenght)
        {
            
    $this->mystring $mystring;
            
    $this->min_lenght $min_lenght;
            
    $this->max_lenght $max_lenght;

            return 
    $this->check();
        }

        function 
    check()
        {
            
    $mystring trim($this->mystring);
            return 
    strlen($mystring) >= $this->min_lenght && strlen($mystring) <= $this->max_lenght;
        }
    }

    $prüfung = new validierung;

    $prüfung->validierung_string(new lenght_min_max("Eigentlich True"230), "Der Wert liegt nicht zwischen 2 und 30");
    ?>

    Kommentar


    • #3
      Üblicherweise speichert man (zumindest Ich mache das idr. so) die Fehler in einem Array.
      Beim mehrsprachigen Fehlern sollte man allgemeine und eindeutige Bezeichner benutzen die dann in eine Fehlermeldung der entsprechenden Sprache umgesetzt werden.
      Als simples Beispiel:
      PHP-Code:
        // --> Einsprachig
        
      $errors = array();
        if (
      $var == "doof") {
          
      $errors[] = "Die Variable ist doof!";
        }
        if (!empty(
      $errors)) {
          
      // Fehler sind aufgetreten
           
      $errors_text "- ".implode("<br>- "$errors);
        }


        
      // --> Multilingual
        
      $errors = array();
        if (
      $var == "doof") {
          
      $errors[] = "ERR_VAR_DOOF";
        }
        if (!empty(
      $errors)) {
          
      // Fehler sind aufgetreten
          
      $errors_text "- ".implode("<br>- "get_error_strings($errors$language));
        } 
      Wie du das in deine Klasse bekommst weisst du hoffe ich selber
      Ich hoffe das Hilft dir. Schönen Feierabend wünsche ich

      mfg Jens

      Kommentar


      • #4
        Dankeschön.

        Nur wollte ich nicht wieder mit den Arrays anfangen und dort alles verzeichnen.
        Oder ist das in diesem Fall gestattet?

        Wenn die Klassen schon so dynamisch funktionieren und allgemein einsetzbar sind, dann kam mir eine Speicherung der Fehler in eine Array zur gemeinsamen Ausgabe etwas "..." vor !?


        Dazu: (Ist die Klasse so ok? Oder ist die Return Methode nicht angebracht in dem Stil?)
        PHP-Code:
        <?php

        class validierung
        {
            var 
        $error_msg;

            function 
        validierung()
            {
                
        $this->error_msg = array();
            }

            function 
        validierung_string($object$error_msg)
            {
                if(
        $object->error == false)
                {
                    echo 
        $error_msg;
                } else {
                    echo 
        "Alles ok";
                }
            }
        }

        class 
        lenght_min_max
        {
            var 
        $mystring;
            var 
        $min_lenght;
            var 
        $max_lenght;
            var 
        $error;

            function 
        lenght_min_max($mystring$min_lenght$max_lenght)
            {
                
        $this->mystring $mystring;
                
        $this->min_lenght $min_lenght;
                
        $this->max_lenght $max_lenght;
                
        $this->error $this->check();

            }

            function 
        check()
            {
                
        $mystring trim($this->mystring);
                return 
        strlen($mystring) >= $this->min_lenght && strlen($mystring) <= $this->max_lenght;
            }
        }

        $prüfung = new validierung;

        $prüfung->validierung_string(new lenght_min_max("Müsste True sein"230), "Der Wert liegt nicht zwischen 2 und 30");
        ?>

        Kommentar


        • #5
          Schau dir doch mal die Validierungsklassen des Zend Frameworks an. Die haben ein Interface für eine Validierungsklasse, gegen dass die konkreten Klassen geschrieben werden. Die Fehlermeldungen pro Validierung werden zunächst in der entsprechenden Validierungsinstanz gespeichert. Eine übergeordnete Klasse stapft dann über die Validierungen und fragt nach Fehlern.

          Ein Beispiel: Eine Validierung kann mehrere Fehlermeldungen produzieren. Ein Passwort zum Beispiel kann gegen eine Mindestlänge nicht erreichen und zu wenig Sonderzeichen beinhalten. Trotzdem wird man sich bequemerweise eine Passwort-Validierungsklasse bauen (die evtl. wieder weitere Validierungen zu rate zieht, aber davon muss die "Außenwelt" nicht wissen).

          Einer Validierungsklasse allerdings eine Ableitung von sich selbst zu übergeben ist eher ungeschickt. Eigentlich bringt die Ableitung ja alles mit, was sie können muss –*oder sollte es jedenfalls.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Ich finde es persönlich in meiner Anfangsphase den Wechsel
            von der Redundanz zu Klassen äußerst schwierig,
            da ich mir nie sicher bin, was ich nun in eine Klasse schreiben,
            oder lieber doch redundant code.

            Erfahrung?
            Ich sehe viele Projekte in welchen SourceCodes einfach fast alles in
            Klassen gewürfelt wird und in anderen nur in funktionen.

            Kommentar


            • #7
              Wenn du merkst, dass du ein paar Zeilen Code schonmal geschrieben hast, dann musst du "refaktorieren". Und das darf man nie aufschieben, dass muss man sofort machen. Konkret musst du an dieser Stelle dafür sorgen, dass der Code nur einmal vorkommt (und nicht das Anti Pattern des Duplicate Codes erfüllt).

              Deswegen vererbt man Klassen auch nicht wild durch die Gegend sondern baut eine Hierarchie auf. Generelle Projekt/Framework-Klasse -> Abstrakte Validierungsklasse -> Konkrete Validierungsklasse -> Spezielle Validierungsklasse

              Das funktioniert natürlich nicht mehr, wenn man auf ein externes Framework o.ä. aufsetzt, aber prinzipiell macht man es da genau so.

              Was "funktional" oder "objektorientiert" angeht: Entscheide dich für eines. Ein Misch Masch führt alle Beteiligten früher oder später in den Wahnsinn.

              Edit: Und jetzt guck dir die ZF-Validierungsklassen an!
              Zuletzt geändert von unset; 25.06.2009, 00:40.
              [FONT="Helvetica"]twitter.com/unset[/FONT]

              Shitstorm Podcast – Wöchentliches Auskotzen

              Kommentar


              • #8
                Mich verwirrt dein Gebrauch des Wortes Redundanz. Klingt als wäre es für dich das Gegenteil von oder eine Alternative zur Objektorientierung. Ist es aber nicht.
                Meinst du vielleicht prozedurale Programmierung (= alles in Funktionen, keine Klassen)?

                Kommentar


                • #9
                  Zitat von onemorenerd Beitrag anzeigen
                  Mich verwirrt dein Gebrauch des Wortes Redundanz. Klingt als wäre es für dich das Gegenteil von oder eine Alternative zur Objektorientierung. Ist es aber nicht.
                  Meinst du vielleicht prozedurale Programmierung (= alles in Funktionen, keine Klassen)?
                  Ja. Tut mir leid. Natürlich meine ich prozedural
                  Ist schon spät und kam vorhin ausm Kino.

                  Kommentar


                  • #10
                    Ist es ok, eine SQL Abfrage durchführen zu lassen aufgrund von
                    variablen Daten, welcher der Klasse gegeben werden?

                    Sprich, der SQL Klasse können beliebige Werte gegeben werden,
                    die Klasse setzt diese übergebenen werte zu einer query zusammen und fragt sie ab.

                    So braucht man nicht immer eine query schreiben sondern der klasse
                    nur sagen welche spalten man braucht und die query wird wie gesagt selbst zusammen gesetzt, abgefragt und das ergebnis zurückgegeben.

                    Eher eine schlechte Idee?

                    Kommentar


                    • #11
                      Zitat von phpMorpheus2 Beitrag anzeigen
                      Ist es ok, eine SQL Abfrage durchführen zu lassen aufgrund von
                      variablen Daten, welcher der Klasse gegeben werden?

                      Sprich, der SQL Klasse können beliebige Werte gegeben werden,
                      die Klasse setzt diese übergebenen werte zu einer query zusammen und fragt sie ab.

                      So braucht man nicht immer eine query schreiben sondern der klasse
                      nur sagen welche spalten man braucht und die query wird wie gesagt selbst zusammen gesetzt, abgefragt und das ergebnis zurückgegeben.

                      Eher eine schlechte Idee?
                      Kommt darauf an, wie komplex die Querries werden können. Es gibt aber einige Frameworks, bei denen das so gemacht wird. Imho allerdings nicht direkt in der Datenbankklasse, sondern über eine weitere Klasse, die als Abstraktionsschicht dient.

                      Und wenn du das auch noch Datenbankübergreifend machen willst, dann schau dir mal Doctrine oder Propel an.

                      Peter
                      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                      Meine Seite

                      Kommentar


                      • #12
                        Mach dich mal über das Prinzip eines DAO schlau. Ich glaube fast, das ist das, was du suchst.
                        [FONT="Helvetica"]twitter.com/unset[/FONT]

                        Shitstorm Podcast – Wöchentliches Auskotzen

                        Kommentar


                        • #13
                          Danke

                          Was würde eine Hilflose Seele wie ich bloß ohne Euch Profis machen

                          Kommentar


                          • #14
                            Zitat von phpMorpheus2 Beitrag anzeigen
                            Danke

                            Was würde eine Hilflose Seele wie ich bloß ohne Euch Profis machen
                            Woanders deine Fragen stellen .

                            Btw: Es gibt beim DAO ein Art von Grundschema. Zuerst modellierst du den Datenzugriff über ein Interface. Darauf baut dann eine abstrake Klasse für allgemeine Zugriffe auf Daten auf. Und darauf bauen dann konkrete Klassen auf, die von der Art des Zugriffs abhängen, also Datenbank, Textdatei, XML-Datei, SOAP-Daten oder sonst was.

                            Peter

                            EDIT:
                            Außerdem solltest du langsam mal von der alten PHP4-Schreibweise abkommen.
                            Zuletzt geändert von Kropff; 27.06.2009, 16:41.
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              Zitat von Kropff Beitrag anzeigen
                              Woanders deine Fragen stellen .

                              Btw: Es gibt beim DAO ein Art von Grundschema. Zuerst modellierst du den Datenzugriff über ein Interface. Darauf baut dann eine abstrake Klasse für allgemeine Zugriffe auf Daten auf. Und darauf bauen dann konkrete Klassen auf, die von der Art des Zugriffs abhängen, also Datenbank, Textdatei, XML-Datei, SOAP-Daten oder sonst was.

                              Peter

                              EDIT:
                              Außerdem solltest du langsam mal von der alten PHP4-Schreibweise abkommen.
                              Klingt wie mein Projekt
                              Wieso PHP4?
                              Was schriebe ich denn in PHP4

                              Kommentar

                              Lädt...
                              X