2011-12-07 103 views
1

我想在Drupal 7中創建一個自定義錯誤頁面。有像set_message這樣的東西,但是他們不記錄錯誤。那麼是否有任何鉤子或類似的東西來捕捉錯誤,將其記錄並向用戶顯示人爲錯誤?Drupal錯誤頁面

+0

發現這裏類似http://stackoverflow.com/questions/1705840/how-to-log-error -message-in-drupal –

+0

太棒了!謝謝! – Michiel

+0

讓我知道它是否適合你。如果沒有,那麼我們可以做更好的事情 –

回答

1

您在上面陳述過,您的目標是「發現錯誤,記錄並向用戶顯示人爲錯誤」。

在這種情況下,您可能正在尋找功能Try/Catch,它允許您嘗試運行一段代碼,如果出現問題,它會顯示一條消息。

在您的特定情況下,你可以用看門狗功能錯誤記錄到Drupal的數據庫日誌記錄系統http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/watchdog/7

可選您也可以登錄該到PHP的error_log以及看到http://php.net/manual/en/function.error-log.php

然後,你可以繼續使用您已經想出的drupal_set_message函數將消息顯示給用戶。

爲你想要什麼來完成會是這個樣子的最終代碼:

try { 

    // RUN YOUR CUSTOM CODE HERE 

} catch (Exception $e) { 

    // Record the error Drupal's database log 
    watchdog('error_page', $e->getMessage()); 

    // Record the error to PHP's error_log 
    error_log($e->getMessage()); 

    // Display a message to the user 
    drupal_set_message("We're sorry, but we couldn't find the page you were looking for.", 'error'); 
} 
+0

這是一個很好的答案!我會盡快嘗試! – Michiel

+0

好的,太好了。據我所知,它做到了!謝謝! – Michiel

+0

太棒了,很高興它解決了這個問題。 –

0

drupal_get_messages()可用於獲取數組以迭代消息的錯誤類型。

我不確定我是否對您的問題有100%的理解,但是因爲您引用了drupal_set_message(),我認爲這可能是您正在尋找的內容。

你可以在hook_init()中處理它,檢查那裏的消息,如果你找到任何東西,就用它做點什麼。

重定向一個錯誤雖然可能會破壞默認的drupal功能,如窗體。