2012-09-05 59 views
1

我使用CakePHP,我工作的錯誤處理CakePHP的錯誤處理

我跟着http://book.cakephp.org/1.3/en/view/1188/Error-Handling

我已創建AppError我的代碼是

應用程序/ app_error.php

<?php 

    class AppError extends ErrorHandler { 


     function error404() { 
      //$this->controller->set('file', $params['file']); 
      $this->_outputMessage('error404'); 
     } 

    } 
    ?> 

我從我的控制器撥打這個錯誤404

function userprofile($id = null) { 
     $user = $this->Session->read('user'); 
     if($id != $user['User']['id']) 
     { 
      $this->cakeError('error404'); 
     } 
} 

,但我發現埃羅 致命錯誤:調用未定義的方法UsersController :: cakeError()在d:\ WAMP \ WWW \調查\程序\控制器\ UsersController.php線318

我錯過了一些東西?

回答

0

我覺得你使用CakePHP 1.3和定義的ErrorHandler這裏延伸:

....\cake\libs\error.php 

,並按照本error404被定義爲:

function error404($params) { 
    extract($params, EXTR_OVERWRITE); 

    if (!isset($url)) { 
     $url = $this->controller->here; 
    } 
    $url = Router::normalize($url); 
    $this->controller->header("HTTP/1.0 404 Not Found"); 
    $this->controller->set(array(
     'code' => '404', 
     'name' => __('Not Found', true), 
     'message' => h($url), 
     'base' => $this->controller->base 
    )); 
    $this->_outputMessage('error404'); 
} 

... /應用/ app_error .php你已經將其定義爲

function error404() { 
     //$this->controller->set('file', $params['file']); 
     $this->_outputMessage('error404'); 
} 

並且在php中這種類型的方法不允許重載。我想你已經得到了你的答案。

你可以做的是,你可以在你的擴展AppError類來創建你自己的函數,然後在傳遞錯誤的名稱或模板的名稱,如

function customeError($errorMessage){ 
    $this->_outputMessage($errorMessage); 
} 

,然後在不同的模板名稱的基礎上,你可以把_outputMessage()函數中的條件並將用戶重定向到不同的頁面。

0

通過錯誤消息中返回的文件夾路徑判斷,它看起來像您正在使用CakePHP 2,而您擁有的文檔和示例是CakePHP 1.3。

error handlingexceptions在2.0書(認真閱讀,也有例外可用噸),我認爲這是有點複雜,但很多更靈活

0

對於CakePHP的2.X,Object::cakeError()有已被刪除。取而代之的是一些例外。所有以前稱爲cakeError的核心類現在都拋出異常。這使您可以選擇處理應用程序代碼中的錯誤,或讓內置的異常處理處理它們。

在CakePHP 2.0中,錯誤和異常處理的控制比以往更多。您可以配置您想要設置爲默認錯誤處理程序的方法以及使用configure的異常處理程序。

以下是Error Configuration的鏈接。您可以輕鬆實現您所需的相同。