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();
        ...
}
DemonGyro
quelle

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.

Lodder
quelle
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