Exception von Klasse zu Klasse wie handhabt ihr das...

R00Ki3

Erfahrenes Mitglied
Hi,
hier eine kleine Beschreibung zu "Exception von Klasse zu Klasse"...
Es wird ein MVC-System genutzt, als erstes wird der Maincontroller aufgerufen.
Dieser ruft wiederrum den Modulcontroller auf, dieser verwendet verschiedene Klassen z.b. Datenbank, Filesystem usw...
Die letzteren Klassen Datenbank, Filesystem usw... werfen eine Exception
ein Beispiel:
PHP:
//DATENBANK
$this->link = mysql_connect($this->dbhost, $this->dbuser, $this->dbpass);
if(!is_resource($this->link)){
   throw new Exception("Fehler beim aufbau der Verbindung zur Datenbank.\nMySQL Fehlermeldung: ".mysql_error()."\nMySQL FehlerNummer: ".mysql_errno());
}
So und jetzt zur frage...
Der Fehler wird nun also wie try-catch von dem Modulcontroller abgefangen, der Modulcontroller wiederrum ist aber nicht für die Ausgabe zuständig sondern der Maincontroller, soll nun der Modulcontroller einfach die Exception weiterreichen und der Maincontroller sie abfangen und wenn ja wie...
Mögliche Lösung...
PHP:
Modulcontroller
try{
...
}catch(Exception $e){
  $error = "Fehlercode: ".$e->getCode()."\n";
  $error.= "Entstanden in der Datei: ".$e->getFile()."\n";
  $error.= "Enstanden in der Zeile: ".$e->getLine()."\n";
  $error.= "Fehlerbeschreibung: ".$e->getMessage()."\n";
  $error.= "Aufrufliste: ".$e->getTraceAsString();
  throw new Exception($error);
}

Maincontroller{
try{
...
}catch(Exception $e){
//schreibt in eine Logdatei...
logerror($e);
//Der User brauch ja nicht wissen was jetzt genau der Fehler war...
print "Sorry es ist ein Fehler aufgetreten...";
}

Über Verbesserungsvorschläge usw. wäre ich sehr froh, thnx vorab...
 
Hi,

warum wirfst du eine Exception in Modulcontroller? Mach einfach im Maincontroller eine

PHP:
try{
... aufrufs des Modulcontrollers...
}catch(Exception $e){
print();
}


Wird jetzt in irgendeiner vererbten Klasse eine Exception geworfen geht diese durch alle Mutterklassen hindurch und kommt schließlich an dem Maincontroller catch Block an.
 
PHP:
try{
...
}catch(Exception $e){
  $error = "Fehlercode: ".$e->getCode()."\n";
  $error.= "Entstanden in der Datei: ".$e->getFile()."\n";
  $error.= "Enstanden in der Zeile: ".$e->getLine()."\n";
  $error.= "Fehlerbeschreibung: ".$e->getMessage()."\n";
  $error.= "Aufrufliste: ".$e->getTraceAsString();
  throw new Exception($error);
}
Das geht schneller und einfacher:
PHP:
try{
    // ...
}catch(Exception $e){
    throw $e;
}
 
Es kann sein, daß ich jetzt etwas missverstanden habe, daher frage ich nochmal nach...
PHP:
try{
    // ...
}catch(Exception $e){
    throw $e;
}
ist jetzt gemeint:
PHP:
Datenbank
$link = @mysql_connect(...,...,...);
if(!is_resource($link)){
   throw new Exception("....fehlerhinweis...");
}
...

Modulcontroller
try{
 $db = new Mysql();
 $db -> connect();
  ...
}catch(Exception $e){
  throw $e;
}
...

Maincontroller
try{
 $modul = new Modulcontroller();
 $modul.....
}catch(Exception $e){
  $error = "Fehlercode: ".$e->getCode()."\n";
  $error.= "Entstanden in der Datei: ".$e->getFile()."\n";
  $error.= "Enstanden in der Zeile: ".$e->getLine()."\n";
  $error.= "Fehlerbeschreibung: ".$e->getMessage()."\n";
  $error.= "Aufrufliste: ".$e->getTraceAsString();
  log($error);
}
reinlogisch also die Exception durch throw $e; weiterreich und den fehlercode ($error...) lediglich im Maincontroller verwenden...

Ersparrt Quelltext usw...
Sieht nett aus und ich hab was dazu gelernt!
Jetzt fehlt nur noch Schokolade, dann sind das 3 dinge in einem. ;)
thnx
 

Neue Beiträge

Zurück