Im Joomla Core finde ich noch viele Aufrufe wie diesen:
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode("\n", $errors));
return false;
}
JError ist jedoch seit Platform Release 12.1 veraltet. Also, wie soll ich Standard-PHP-Ausnahmen verwenden.
php
error-handling
jerror
Harald Leithner
quelle
quelle
Antworten:
Wie @DmitryRekun sagte, ist hier eine gute Diskussion . Das wichtigste Kriterium dabei ist, welche Art von Fehler haben Sie?
Es gibt zwei Arten von Fehlern:
Der Unterschied lässt sich wie folgt zusammenfassen:
Jetzt wissen wir, womit wir es zu tun haben. Was sollte man tun?
Wenn der Fehler nicht behoben werden kann, möchten Sie ihn auf eine Fehlerseite umleiten, anstatt mit der angeforderten Seite fortzufahren . Das ist so einfach wie das Folgende:
Exception
ist eine Klasse, die zwei Parameter akzeptiert, eine Nachricht und einen Code. Es wird empfohlen, die HTTP-Antwortcodes zu verwenden, wenn sie zu Ihrem Szenario passen.Wenn der Fehler behoben werden kann, möchten Sie dem Endbenutzer wahrscheinlich nur eine Nachricht anzeigen, während ihm die angeforderte Seite angezeigt wird. Dies bedeutet normalerweise, dass Sie eine Nachricht für die Anwendung in die Warteschlange stellen müssen:
enqueueMessage
Es werden zwei Parameter verwendet, die Fehlermeldung und ein Nachrichtentyp. Mehr Infos hier (unten).Es gibt auch eine dritte Situation, die zumindest für mich ziemlich häufig vorkommt. Joomla löst Ausnahmen für verschiedene Fehler aus (z. B. einen Datenbankabfragefehler). Dies bedeutet, dass Joomla denkt, dass dieser Fehler nicht behebbar ist. Möglicherweise möchten Sie jedoch trotzdem fortfahren. (Wenn ich zum Beispiel eine Tabelle bei der Aktualisierung meiner Erweiterung ändere, kann ich einfach die
ALTER
Abfrage ausführen , die eine Ausnahme auslöst, wenn die Tabelle zuvor geändert wurde.)In diesem Fall möchten Sie den Code, der möglicherweise eine Ausnahme auslöst, in einen try ... catch-Abschnitt einschließen:
Beachten Sie, dass Sie den nicht behebbaren Fehler "abfangen" und das System zur Wiederherstellung zwingen und die angeforderte Seite weiterhin anzeigen.
Addieren Sie all dies und Ihr Fall sollte ein nicht behebbarer Fehler sein. (Ich weiß das, weil Sie danach "false" zurückgegeben haben, also planen Sie wahrscheinlich nicht fortzufahren und geben die Funktion auf.)
Also würde ich das wie folgt umschreiben:
quelle
$this->get('Errors')
weil es auch veraltet ist.JDEBUG
isttrue
.So gehe ich mit Fehlern um.
Ansicht oder Controller
Wenn ich also einen 404-Code von meinem Modell bekomme (zum Beispiel):
Dann fange ich es in der Ansicht oder im Controller ein und werfe eine weitere Ausnahme, die Joomla behandeln und 404-Seite anzeigen wird. Bei allen anderen zeige ich dem Benutzer nur eine allgemeine Fehlermeldung.
Auch liest diese interessante Diskussion über die Fehlerbehandlung.
quelle
Die meisten Codeblöcke dieser Art können einfach durch solche ersetzt werden,
enqueueMessage
da sie den Fehler nicht tatsächlich behandeln und lediglichJError
zum Ausdrucken verwenden.quelle