2011-02-18 58 views
0

嘿傢伙, 是否可以捕捉並忽略JError :: raiseError? 我使用JDatabase,如果用戶行爲'愚蠢'可能會發生重複的條目。 但這不是一個問題,可以默默地忽略。Joomla - 無聲地吞下JError :: raiseError消息

不幸的是,這個錯誤是打印在洞頁面上。現在我不想 刪除一個新的查詢只是爲了檢查這個主鍵是否已經存在。

+0

找到解決方案。系統調試已啓動。在配置 - 設置中關閉它後,錯誤不再顯示。 – 2011-02-21 10:45:18

回答

1

要禁止在執行路徑調用的Joomla異常投擲:

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

替代,你可以設置自己的自定義處理程序:

JError :: setErrorHandling(E_ALL, '回調',陣列('myClass','myErrorHandlerFunction'));

+0

以上聲明「沒有來自raiseError的ESCAPE」是不正確的。只有在沒有找到錯誤處理程序的情況下才調用JExit。例如通過將一個無效的類/函數傳遞給SetErrorHandling。 – Frans 2011-08-12 12:17:35

1

有沒有ESCAPE raiseError

下面是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; 
} 
+0

謝謝,這是完全正確的。我查看了JDatabase :: query方法,發現只有在設置了_debug時纔會引發錯誤。所以我看看我的配置,看到我打開系統調試... ups :)對於 – 2011-02-21 10:44:02

1

如果覆蓋現有的行不要緊,你可以使用

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

MYSQL REPLACE

,這將創造一個排或替換現有的。如果該行存在,那應該使它完全沒有錯誤發生。

+0

yup這是正確的。謝謝。我已經爲我的問題找到了另一個解決方案只需要打開調試消息。 ups ^^ – 2011-02-21 10:46:40