Заменить устаревшие getError и getErrors

8

Я просматривал некоторые журналы и заметил, что getError () и getErrors () выбрасывают устаревшие сообщения в Joomla 3.3 (мы только что обновили). Очевидно, они были устаревшими в Joomla 2.5, но мне трудно найти решение для обновления.

Я просмотрел основные файлы Joomla, и даже они все еще используют getError () и getErrors (). Есть ли замена для них, или это как JViewLegacy и т. Д., Где нет альтернативы в данный момент?

Пример, где я использую это для сохранения пользователя:

if (!$user->save()) {
        $error = $user->getError();
        ...
}
DemonGyro
источник

Ответы:

3

Вместо этого вы должны использовать исключения PHP. Я нахожу странным, что Joomla выбрасывает устаревшие сообщения, когда их использование JErrorеще не используется в ядре 3.3.6.

Во всяком случае, ниже будет пример исключений для запроса к базе данных

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

Это выдаст ошибку, говоря, что таблица не существует, потому что я использовал #__userвместо #__users.

В вашем случае я бы попробовал следующее:

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

$e->getMessage() Конечно, вы получаете ошибку, так что внутри команды вы можете выбрать, что вы хотите с ней сделать, например, зарегистрировать ее или просто отобразить.

Лоддер
источник
Будет ли $ e-> getMessage () возвращать те же сообщения об ошибках, что и вызов getError () (также локализованный)?
DemonGyro
Я нашел время для внесения предложенных вами изменений, но это не сработало. save () не выдает ошибки, которые я ожидаю как исключения, поэтому код catch никогда не запускается.
DemonGyro