因此,有些情况可能会有一个或多个错误报告给用户(以及通知我),这些错误可能是在控制器级别(输入,验证)或模型级别引起的。
我正在考虑为“反馈”创建一个基本帮助器,它基本上具有全局消息数组(通知,错误,成功)
然后在模型或控制器级别,如果出现问题(或正确!),我可以调用反馈函数。
feedback('error','Connection is temporarily down blah')
我不需要将它传递给我的观点,因为它将全局设置,因此我可以调用类似$ this-> feedback-> display_all()的内容。
这是一个好的/ MVC友好的做事方式吗?对我来说,这似乎是一种直接的方法来实现
答案 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');控制器中的功能。