Codeigniter:创建辅助和全局消息数组以获得反馈和错误

时间:2012-03-24 07:27:06

标签: codeigniter error-handling codeigniter-2

因此,有些情况可能会有一个或多个错误报告给用户(以及通知我),这些错误可能是在控制器级别(输入,验证)或模型级别引起的。

我正在考虑为“反馈”创建一个基本帮助器,它基本上具有全局消息数组(通知,错误,成功)

然后在模型或控制器级别,如果出现问题(或正确!),我可以调用反馈函数。

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

我不需要将它传递给我的观点,因为它将全局设置,因此我可以调用类似$ this-> feedback-> display_all()的内容。

这是一个好的/ MVC友好的做事方式吗?对我来说,这似乎是一种直接的方法来实现

2 个答案:

答案 0 :(得分:1)

对于我的项目,我创建了一个小mdl_error模型。

此模型有一个公共函数throwError,以及一些私人帮助程序,它们将向用户显示Flash通知,并在需要时向我发送包含当前值和会话数据的电子邮件。该模型是自动加载的,只在需要时才会调用。

这基本上是它的样子:

<?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("error@whatever.com");
        $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());

答案 1 :(得分:0)

如果你使用show_error('你的错误信息');在你的控制器中你将实现相同的功能。如果要自定义错误的外观,则需要使用应用程序/错误中的error_general.php文件。

如果您还想记录错误,可以使用log_message('level','message');控制器中的功能。