Joomla - 静默地吞下一个JError :: raiseError-Message

时间:2011-02-18 11:46:35

标签: error-handling joomla joomla1.5

嘿伙计们, 是否可以捕获并忽略JError :: raiseError? 我使用JDatabase,如果用户行为'愚蠢',可能会发生重复的条目。 但这不是问题,可以默默地忽略。

不幸的是,这个错误打印在孔页面上。现在我不想 删除一个新查询只是为了检查这个主键是否已经存在。

3 个答案:

答案 0 :(得分:2)

禁用在执行路径调用中抛出Joomla异常:

JError::setErrorHandling(E_ALL, "ignore");

替代方案,您可以设置自己的自定义处理程序:

JError :: setErrorHandling(E_ALL,'callback',array('myClass','myErrorHandlerFunction'));

答案 1 :(得分:1)

来自raiseError

没有ESCAPE

以下是Joomla的加注方法。你可以看到它使用 jexit 来调用php exit

function & raise($level, $code, $msg, $info = null, $backtrace = false)
{
    jimport('joomla.error.exception');

    // build error object
    $exception = new JException($msg, $code, $level, $info, $backtrace);

    // see what to do with this kind of error
    $handler = JError::getErrorHandling($level);

    $function = 'handle'.ucfirst($handler['mode']);
    if (is_callable(array('JError', $function))) {
        $reference =& JError::$function ($exception, (isset($handler['options'])) ? $handler['options'] : array());
    } else {
        // This is required to prevent a very unhelpful white-screen-of-death
        jexit(
            'JError::raise -> Static method JError::' . $function . ' does not exist.' .
            ' Contact a developer to debug' .
            '<br /><strong>Error was</strong> ' .
            '<br />' . $exception->getMessage()
        );
    }

    //store and return the error
    $GLOBALS['_JERROR_STACK'][] =& $reference;
    return $reference;
}

答案 2 :(得分:1)

如果覆盖现有行无关紧要,可以使用

REPLACE INTO 'table' set 'field'=1 etc etc

MYSQL REPLACE

这将创建一行或替换现有的一行。这应该使得如果行存在则根本不会引发错误。