Ankündigung

Einklappen
Keine Ankündigung bisher.

Exeption-Handling in MVC

Einklappen

Neue Werbung 2019

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

  • Exeption-Handling in MVC

    Hallo Community,

    ich hätte mal eine Frage zu Thema Exeption-Handling in einem MVC-Framwork:

    PHP-Code:
        public function getMainmenu($isLoggedIn FALSE)
        {   
            
    $result = array();
            
            try
            {
                if(!
    $res $this->getDoctrine()->getRepository('EDCHomepageBundle:mainmenu'))
                {
                    throw new 
    Exception('getDoctrine->getRepository');
                }
                
                if(!
    $isLoggedIn)
                {
                    
    $result $res->findBy(array('hidden' => 0), array('mainmenuId' => 'ASC'));
                    throw new 
    Exeption('$res->findBy (not loggedIn)');
                }
                else
                {
                    
    $result $res->findBy(array(), array('mainmenuId' => 'ASC'));
                    throw new 
    Exeption('$res->findBy (loggedIn)');
                }
            }
            catch (
    Exeption $ex)
            {
                return array(
    'exeption' => $ex->getMessage());
            }
            
            return 
    $result;
        } 
    Die Frage ist wie ich mit Exeptions im Model umgehen soll, soll ich diese, wie man es von einem Model nicht erwartet per "echo" ausgeben oder soll ich diese, wie oben zu sehen, über ein Array an den Controller geben und diesen anschließend das Array auf eine Exeption prüfen lassen?

    Was ist die richtige Lösung?
    - Laravel


  • #2
    soll ich diese, wie man es von einem Model nicht erwartet per "echo" ausgeben
    Würde ich nicht machen. Ein Model ist nicht für die Ausgabe verantwortlich. Das Model sollte eine Exception werfen bzw. bewusst nicht auffangen und ein Controller sollte diese dann auffangen und sich um das Handling kümmern. Bin aber kein MVC-Experte, mal schauen was die anderen dazu sagen.

    Kommentar


    • #3
      Danke das scheint mir eine sehr gute Problemlösung zu sein
      - Laravel

      Kommentar


      • #4
        Es gibt nicht 'die' richtige Lösung. Exceptions haben auch wenig mit MVC zu tun. Und es gibt auch nicht den einen richtigen Weg, wie man überhaupt mit Exceptions umgehen soll. Ein paar gute Faustregeln findest du in 'CleanCode' von Robert C. Martin.

        Grundsätzlich sollte eine Exception nur in Ausnahmefällen geworfen werden. Also, wenn ein Fall Eintritt, der vom normalen Weg abweicht und einen Abbruch der Subroutine zur Folge haben sollte.
        Standards - Best Practices - AwesomePHP - Guideline für WebApps

        Kommentar


        • #5
          Ich hätte es im Grunde auch so formuliert wie monolith, wobei das natürlich schon recht – na ja – „pauschal“ ist. Es gab zu unter anderem einem Recht ähnlichen Anwendungsfall („Fehler“-Behandlung bei Authentifizierung) hier mal diesen Thread:

          - http://www.php.de/software-design/99...ueckgeben.html

          Kannst ja mal reinschauen.

          Exception, btw. Ich schreibe immer Expection, du lässt das c weg.

          Kommentar


          • #6
            Ich weiß nicht wie Sinnvoll es ist Exceptions die im selbem Scope geworfen werden zu fangen um sie dann nicht wieder zu werfen. Exceptions sind keine Werkzeuge zur generellen Programmfluss- oder Logiksteuerung.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Eigentlich sollte in der Regel bei Usereingaben Exception-Handling verwendet werden, aber selbst hier lässt sich das auch vermeiden. Einfach in dem man die Usereingaben vorher prüft.

              Ansonsten finde ich die eigentlich nur sinnvoll wenn man selbst etwas programmiert und richtig debuggen möchte. Frameworks schmeißen ja immer Exceptions wenn man als Programmierer was falsch macht .

              Kommentar


              • #8
                sollte in der Regel bei Usereingaben Exception-Handling verwendet werden
                Das glaube ich jetzt aber nicht ganz. Ich denke Usereingaben Validierung sollte keine Exception werfen, man mag mich bitte korrigieren wenn ich irre. Da gab es sogar hier mal einen fetten Thread wo das Thema war wann bzw. besser unter welchen Umständen eine geworfen wird.
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Der hier war es:
                  http://www.php.de/software-design/99...ueckgeben.html

                  (Sorry fürs Doppelpost, irgendwie falschen Button erwischt )
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Zitat von hausl Beitrag anzeigen
                    Das glaube ich jetzt aber nicht ganz. Ich denke Usereingaben Validierung sollte keine Exception werfen, man mag mich bitte korrigieren wenn ich irre. Da gab es sogar hier mal einen fetten Thread wo das Thema war wann bzw. besser unter welchen Umständen eine geworfen wird.
                    Deswegen schrieb ich ja auch das sich das vermeiden lässt. Viele Fehler können durch eine vorige Prüfung vermieden werden.
                    Darum treten auch eher viele Fehler bei der Entwicklung selber auf.

                    Kommentar


                    • #11
                      Eigentlich sollte in der Regel bei Usereingaben Exception-Handling verwendet werden, ...
                      Ok, den Satz las ich anders, aber gut Ev. ist ja der von mir verlinkte Beitrag auch für den TE ganz interessant.
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von hausl Beitrag anzeigen
                        Ok, den Satz las ich anders, aber gut Ev. ist ja der von mir verlinkte Beitrag auch für den TE ganz interessant.
                        der Satz endete ja auch mit

                        aber selbst hier lässt sich das auch vermeiden.

                        Kommentar


                        • #13
                          Eine Exception ist eine Ausnahme, die es verunmöglicht das Programm auf vorgesehenem Weg zu beenden. Daraus folgt, dass beispielsweise eine Validierung keine Exception werfen darf. Ein Einfügen falscher Daten in die Datenbank jedoch darf eine Exception werfen, denn hier wird der vorhergesehene Weg unterbrochen und es ist keine Alternative möglich.

                          Im Falle des TE sind die Exceptions überflüssig, da er sie selber im gleichen Scope wieder fängt. Das ist Kontrollfluss durch Exception und eher unsauber. Zudem müsste meiner Meinung nach sicher eine sinnvollere Fehlerbeschreibung angegeben werden als der Methodenname der aufgerufenen Funktion.
                          GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                          Kommentar


                          • #14
                            Zitat von ChristianK Beitrag anzeigen
                            Zudem müsste meiner Meinung nach sicher eine sinnvollere Fehlerbeschreibung angegeben werden als der Methodenname der aufgerufenen Funktion.
                            Der ja ohnehin im StackTrace steht.

                            In @TE's Code hätte man auch einfach nach den Wächterprinzip returnen können.
                            Zitat von nikosch
                            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                            Kommentar


                            • #15
                              Zitat von tr0y Beitrag anzeigen
                              Ich weiß nicht wie Sinnvoll es ist Exceptions die im selbem Scope geworfen werden zu fangen um sie dann nicht wieder zu werfen. Exceptions sind keine Werkzeuge zur generellen Programmfluss- oder Logiksteuerung.
                              Ganz meine Meinung. Noch dazu führt die "Konvertierung" der Exception zu einem Array und die folgende Rückgabe zu einem doppeldeutigen Rückgabewert. So muss an einer anderen Stelle noch einmal geprüft werden ob die gewünschte Navigation oder ein Fehler zurückgegeben wurde.

                              Kommentar

                              Lädt...
                              X