替换不赞成使用的getError和getErrors


8

我一直在浏览一些日志,发现getError()和getErrors()在Joomla 3.3(我们刚刚更新)中抛出了不赞成使用的消息。显然,这些在Joomla 2.5中已被弃用,但是我很难找到一种解决方案来更新。

我浏览了Joomla核心文件,甚至它们仍在使用getError()和getErrors()。是否有这些替代品,还是像JViewLegacy等目前没有替代品?

我使用它的一个示例是保存用户:

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

Answers:


3

您应该改用PHP Exceptions。我确实发现奇怪的是,Joomla在使用JError3.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() 当然会得到错误,因此在catch中,您可以选择要处理的错误,例如将其记录或仅显示它。


$ e-> getMessage()是否会返回与getError()调用相同的错误消息(也已本地化)?
DemonGyro 2014年

我有时间实施您建议的更改,但是没有用。save()不会抛出我期望作为异常的错误,因此捕获代码永远不会运行。
DemonGyro 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.