web-dev-qa-db-fra.com

Remplacer les méthodes obsolètes getError et getErrors

J'ai parcouru quelques journaux et j'ai remarqué que getError () et getErrors () lançaient des messages obsolètes dans Joomla 3.3 (que nous venons de mettre à jour). Apparemment, ils étaient obsolètes dans Joomla 2.5, mais j'ai du mal à trouver une solution de mise à jour.

J'ai jeté un coup d'oeil à travers les fichiers de base de Joomla et même ils utilisent toujours getError () et getErrors (). Y at-il un remplacement pour ceux-ci, ou est-ce que c'est comme JViewLegacy, etc. où il n'y a pas d'alternative pour le moment?

Un exemple où je l'utilise est pour sauver un utilisateur:

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

Vous devriez utiliser PHP Exceptions à la place. Je trouve étrange que Joomla jette des messages obsolètes lorsque vous utilisez JError et pourtant il n’est pas encore utilisé dans le noyau 3.3.6.

Quoi qu’il en soit, ce qui suit est un exemple d’exceptions pour une requête de base de données.

$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();
}

Cela produira une erreur indiquant que la table n'existe pas car j'ai utilisé #__user À la place de #__users.

Dans votre cas, je voudrais essayer ce qui suit:

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

$e->getMessage() a bien sûr l'erreur, alors à l'intérieur de la capture, vous pouvez choisir ce que vous voulez en faire, telle que la consigner ou simplement l'afficher.

3
Lodder