2012-03-24 49 views
0

因此,有些情況下可能有一個或多個錯誤向用戶報告(並通知我)可能在控制器級別(輸入,驗證)還是模型級別。Codeigniter:爲反饋和錯誤創建幫助程序和全局消息數組

我正在考慮在模型或控制器級別創建「反饋」,基本上具有全局消息陣列(通知,錯誤,成功)基本幫手

然後要麼,如果出現錯誤(或右! ),我可以調用反饋功能。

feedback('error','Connection is temporarily down blah') 

我不需要通過它傳遞給我的意見,因爲它會在全球範圍內設置這樣我就可以調用類似$這個 - >反饋 - > display_all()。

這是一個好/ MVC友好的方式來做事情?這似乎是一個直接的方法,我執行

+0

難道你找到了答案?我正在嘗試實現類似。 Thx – 2012-07-24 11:23:34

回答

0

如果您使用show_error('您的錯誤信息');在你的控制器中的功能,你會達到相同的。如果您想自定義錯誤的外觀,您需要使用應用程序/錯誤中找到的error_general.php文件。

如果你還想記錄錯誤,你可以使用log_message('level','message');功能在您的控制器。

+0

但是如何編譯錯誤或一般消息以顯示給視圖中的用戶?我看到log_message允許不同類型的消息,這將適合,但它實際上是記錄(?)。 – Quadrant6 2012-03-24 20:32:30

+0

那是什麼show_error('你的錯誤信息');是爲了。你可以使用show_error('你的錯誤信息')來幫助你;回聲是你的特定錯誤,所以你的控制器中的代碼會更少。 – Bananenspin 2012-03-25 10:44:11

1

對於我的項目,我創建了一個小型mdl_error模型。

此模型有一個公共職能,throwError和一些私人助手,會向用戶顯示閃光通知,並根據需要用當前值和會話數據向我發送電子郵件。該模型是自動加載的,只有在需要時纔會調用。

這裏基本上是什麼樣子:

<?php 
class mdl_error extends CI_Model 
{ 
//types: error, alert, good 
function throwError($type, $message, $info="", $flash=true, $email=true) 
{ 

    if($flash){ 
     $alert = $type."|".$message; 
     $this->session->set_userdata(array("flash" => $alert)); 
    } 
    if($email){ 
     $problems = $this->recursivePrintingOfVariables($info); 
     $sessionData = $this->recursivePrintingOfVariables($this->session->userdata); 

     $emailMessage = "Name<br/> <br/>Something has happened. <br/> <br/>"; 
     $emailMessage .= "The type was: {$type}<br/>The message was: {$message}<br/> <br/> <br/>"; 
     $emailMessage .= "Here is the local variables at the time:<br/> <br/>{$problems}<br/> <br/> <br/>"; 
     $emailMessage .= "Here is the session data:<br/> <br/>{$sessionData}<br/> <br/> <br/>"; 
     $emailMessage .= "Please solve this problem or we are all dooooooomed.<br/><br/>Love,<br/>Website"; 
     $this->load->library('email'); 
     $this->email->from("my email"); 
     $this->email->to("[email protected]"); 
     $this->email->subject($type.' Message from Website'); 
     $this->email->message($emailMessage); 
     $this->email->send(); 

    } 

} 

function recursivePrintingOfVariables($info) 
{ 
    $keys = array_keys($info); 
    $string = ""; 
    foreach($keys as $key){ 
     $string .= $key." => "; 
     if(is_array($info[$key])){ 
      $string .= "Inner Array<br/>"; 
      $string .= "<div style='margin-left:15px;'>"; 
      $string .= $this->recursivePrintingOfVariables($info[$key]); 
      $string .= "</div>"; 
     }else{ 
      $string .= $info[$key]; 
     } 
     $string .= "<br/><br/>"; 
    } 
    return $string; 
} 

}

然後,如果在我的代碼中的錯誤發生在一個點,我只要致電:

$this->mdl_error->throwError("error","something happend", get_defined_vars());