2013-01-08 30 views
0

我有一個關於codeigniter中錯誤處理的問題。 我的第一個問題是誰應該調用show_error方法?模型或控制器或視圖? 我打算把它放在這個特定案例的模型中,因爲模型是產生錯誤的地方,但由於我的大部分業務邏輯都在控制器中,我決定在那裏做。 BUT我想知道是否有「正確」的方式來做到這一點。codeigniter中的錯誤處理:誰應該調用show_error()

我的第二個問題是這個。在模型中,我添加了兩個函數 - 一個返回數據,另一個返回錯誤消息。我的控制器在調用我的模型後測試錯誤情況,並嘗試顯示它。但它總是空的。

我的模型看起來是這樣的:

public function errormessage() 
    { 
     return $this->_emess; 
    } 
    public someotherfunction() 
    { 
     if ($switch_obj->connect()) 
     { 
      $retdata = $switch->showInterfaceAll(); 
      $switch->disconnect(); 
      $this->_data = $retdata; 
      return true; 
     } 
     else 
     { 
      print 'debug: assigning error message in model:'; 
      $this->_emess = $switch->errormessage(); 
      print $this->_emess; 
      return false; 
     } 
      } 

然後在我的控制,我有以下邏輯:

 if ($this->switches_model->someotherfunction($this->uri->segment(7))) 
     {  
     $data['listofports'] = $this->switches_model->data; 
     } 
     else { 
       print '<BR>in error path<BR>'; 
     show_error($this->switches_model->errormessage(), 123); 
     } 

從模型我調試打印語句,我知道一個錯誤消息已設置。但是,當控制器嘗試使用show_error()方法顯示它時,我收到以下錯誤消息:

沒有狀態文本可用。請檢查您的狀態代碼號碼或 提供您自己的消息文本。

爲了證明它不是因爲該模型已經被銷燬,我試圖在我的模型加入了析構函數,並打印出調試行...

public function __destruct() 
    { 
     print 'in the destructor'; 
    } 

消息「錯誤路徑」是在「析構函數」之前打印的,所以我假設模型仍然活着,並且...

任何建議,將不勝感激。

謝謝。

更新1

,我發現我的問題。如果你打算傳一個合法的狀態碼,你需要傳遞一個合法的狀態碼。 我以爲你可以創建自定義狀態號碼,但他們必須是HTTP代碼。但是如果有人可以對問題1發表評論,請問誰應該調用show_error(),這會非常感激。 謝謝。

回答

1

第一個問題的簡短答案是否定的,沒有一個「正確」的方法來做到這一點。

在你的問題,你說:

,因爲我大部分的業務邏輯是在控制器中,我決定做它。

這是爭論和可能不是應該在這個網站上的辯論,但我發現,一般來說,控制器是爲了更多的調度員,然後是其他任何東西。所以,你的控制器應該儘可能小。這就是說,因爲show_error()函數也決定顯示哪個視圖,所以我會調用一個調度函數並將其放入控制器中。如果您沒有使用該函數,而是使用log_message()將錯誤存儲在日誌中並繼續處理,那麼我會將它放入模型中,因爲您可以在使用該函數後繼續執行該過程。再次,這是個人選擇,可以在任何地方完成,但我通常會這樣做。

+0

100%同意你的看法。你已經得到了我的投票。 – ivanargulo