finswimmer: Fehlerbehandlung

Hallo,

ich erstelle grade erstmalig ein größeres Projekt in PHP. Dabei setze ich konsequent auf OOP und das MVC Pattern.

Nun hänge ich aber grade an den Punkt, wohin am besten mit der Fehlerbehandlung?

Folgendes Szenario:

Der Benutzer gibt etwas in ein Textfeld ein. Das was er dort eingibt, sollte normaler Weise ein vorgegebens Format haben, damit das Programm dann weiß, was es damit tun soll. Nun kann es natürlich passieren, dass es das nicht hat. Ziel: Der Benutzer soll darüber informiert werden, dass das Format ungültig ist.

Wohin schreibe ich nun am besten den Code, für das was passieren soll? Eine eigene Klasse? Einfach nur eine neue Methode innerhalb des bestehendes Controller? Ganz anders strukturieren?

fin swimmer

akzeptierte Antworten

  1. Neben Exceptions die du auch behandeln solltest, beschreibst Du hier einen Fehler seitens Benutzer.

    Gemäß MVC liegt das, was zu prüfen ist, beim Modell M und für die Prüfung zuständig ist C, also die Controller-Class.

    Ergo genügt der Fehlerbehandlung eine entsprechende Methode in o.g. Klasse.

    1. Neben Exceptions die du auch behandeln solltest, beschreibst Du hier einen Fehler seitens Benutzer.

      Gemäß MVC liegt das, was zu prüfen ist, beim Modell M und für die Prüfung zuständig ist C, also die Controller-Class.

      Ergo genügt der Fehlerbehandlung eine entsprechende Methode in o.g. Klasse.

      Im Grunde genommen wird die Fehlermeldung entweder in das Template eingebaut oder das Template für den Body wird ausgetauscht. Hier ein Beispiel für Letzeres

      Solch Vorgehensweise muss nicht klassenübergreifend sein.

  2. Tach!

    Wohin schreibe ich nun am besten den Code, für das was passieren soll? Eine eigene Klasse? Einfach nur eine neue Methode innerhalb des bestehendes Controller? Ganz anders strukturieren?

    Validierung kann im einfachsten Fall im Controller passieren. Der setzt dann einige Variablen für das Template und das kümmert sich um die Darstellung.

    Validierung ist aber nicht unbedingt Aufgabe des Controllers, es sei denn, es handelt sich um eine spezielle Validierung nur für diese Action, die wenig oder gar nichts mit dem Model zu tun hat. Eigentlich sollte das Model wissen, ab seine Daten valide sind oder nicht. Das heißt also, man erstellt sich ein Model-Objekt aus den Eingabedaten, und dann kommt es darauf an, wie man die Model-Geschichte realisiert hat. Als Active Record kann das Model sich selbst prüfen. Hat man jedoch schlanke Daten-Klassen, wird der Validator ein separater Teil innerhalb des Model-Teils sein.

    Ich empfehle, bei anderen Projekten Inspiration zu holen. Ich kenne Yii als PHP-MVC-Framework, das Active-Record verwendet, und ASP.NET MVC, das mit schlanken Model-Klassen arbeitet. Selbst wenn du von C# oder VB keine Ahnung hast, kannst du da mal das Tutorial anschauen. Man kann das nicht direkt in PHP umsetzen, weil ASP.NET das in PHP nicht vorhandene Attribute-Konzept nehmen kann, um die Validierungsinformation an die Datenklassen anzuhängen, aber wenigstens ein Gefühl kann man bekommen, wie das generell arbeitet.

    dedlfix.

    1. Hallo, danke euch beiden für die Antworten.

      Validierung kann im einfachsten Fall im Controller passieren. Der setzt dann einige Variablen für das Template und das kümmert sich um die Darstellung.

      Vermutlich werde ich diesen Ansatz wählen.

      Validierung ist aber nicht unbedingt Aufgabe des Controllers, es sei denn, es handelt sich um eine spezielle Validierung nur für diese Action, die wenig oder gar nichts mit dem Model zu tun hat.

      Aus den Daten die Benutzer eingegeben hat, sollen dann Informationen extrahiert werden aus denen die Model Objekte erzeugt werden. Dabei stehen die Infos die ich für das Object brauche in je einer Zeile und sind durch einen Delimiter getrennt. Nun muss ich ja zumindest erstmal prüfen, ob ich in jeder Zeile die benötigte Anzahl an Informationen habe. Das wäre eher Aufgabe des Controllers, oder? Ob die einzelnen Infos dann auch Sinn haben, könnte ich ggf. dem Model überlassen?

      fin swimmer

      1. Tach!

        Nun muss ich ja zumindest erstmal prüfen, ob ich in jeder Zeile die benötigte Anzahl an Informationen habe. Das wäre eher Aufgabe des Controllers, oder? Ob die einzelnen Infos dann auch Sinn haben, könnte ich ggf. dem Model überlassen?

        Das heißt, die Daten kommen so an, dass der Controller sie erstmal auseinandernehmen (lassen) muss. Generell gesagt ist der Controller der Chef. Der kann das (und das Validieren) selbst ausführen, man wird das aber eher delegieren wollen, vor allem wenn das mehr als eine Handvoll Zeilen werden. Eine Validator-Klasse oder für Kleinigkeiten eine Methode im Controller wären meine Favoriten. Das Model kümmert sich dann um die modelspezifischen Prüfungen.

        dedlfix.