Ersetzen Sie veraltete getError und getErrors


8

Ich habe einige Protokolle durchgesehen und festgestellt, dass getError () und getErrors () in Joomla 3.3 (wir haben es gerade aktualisiert) veraltete Nachrichten auslösen. Anscheinend waren diese in Joomla 2.5 veraltet, aber es fällt mir schwer, eine Lösung zu finden, auf die ich aktualisieren kann.

Ich habe mir die Joomla-Kerndateien angesehen und selbst sie verwenden immer noch getError () und getErrors (). Gibt es einen Ersatz für diese oder ist es wie bei JViewLegacy usw., wo es momentan keine Alternative gibt?

Ein Beispiel, in dem ich es verwende, ist das Speichern eines Benutzers:

if (!$user->save()) {
        $error = $user->getError();
        ...
}

Antworten:


3

Sie sollten stattdessen PHP-Ausnahmen verwenden. Ich finde es seltsam, dass Joomla bei der Verwendung veraltete Nachrichten JErrorauslöst, die im 3.3.6-Kern noch nicht verwendet werden.

Wie auch immer, das Folgende wäre ein Beispiel für Ausnahmen für eine Datenbankabfrage

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('username')))
      ->from($db->quoteName('#__user'))
      ->where($db->quoteName('username') . ' = ' . $db->quote('Lodder'));
$db->setQuery($query);

try
{
    // Try to get an object based on the results from the database
    $results = $db->loadObjectList();
    print_r($results);
}
catch (Exception $e)
{
    // Start crying cause it didn't work
    echo $e->getMessage();
}

Dies wird einen Fehler auslösen, der besagt, dass die Tabelle nicht existiert, weil ich #__userstattdessen verwendet habe #__users.

In Ihrem Fall würde ich Folgendes versuchen:

try
{
    $user->save();
    // redirect or do something magical
}
catch (Exception $e)
{
    echo $e->getMessage();
}

$e->getMessage() Natürlich wird der Fehler angezeigt, sodass Sie innerhalb des Catch auswählen können, was Sie damit tun möchten, z. B. protokollieren oder einfach anzeigen.


Gibt $ e-> getMessage () dieselben Fehlermeldungen zurück wie der Aufruf von getError () (ebenfalls lokalisiert)?
DemonGyro

Ich habe Zeit gefunden, um die von Ihnen vorgeschlagenen Änderungen umzusetzen, und es hat nicht funktioniert. save () wirft die erwarteten Fehler nicht als Ausnahmen aus, daher wird der catch-Code nie ausgeführt.
DemonGyro
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.