PHP和Codeigniter中的错误处理。怎么做?避免递归代码

时间:2012-01-05 23:49:59

标签: php codeigniter exception-handling error-handling

我正在使用Codeigniter。

我开发了各种功能,如果按预期使用,它们可以很好地工作。

一个这样的脚本,一个whois脚本检查域名的所有者。 但是,如果用户键入了无效的域名,则会在那里和任何地方抛出各种错误。

例如,如果用户键入stack.-com,则这当然不是有效域。因此,当我调用执行查询的助手时,不返回任何结果并返回各种错误。当我尝试向用户显示空数组时也存在错误。

我的问题与错误有关。

我可以使用preg_match并检查域是否有效。如果没有,我设置一个我打算输出给用户的错误变量。

然而,在我的控制器到达判断是否显示错误页面或结果页面的if else语句之前,程序正在运行查询,并且访问方法以获取没有错误的数据将使数据通过到结果视图。

I.E我知道有错误,但仍然显示很多其他错误,因为无效的项目正在传递给我的其他脚本。

使用Codeigniter和MVC设置,捕获错误并将其显示给用户的最佳方法是什么,而不必使用一遍又一遍地执行相同操作的异常?

由于

使用IDEA编辑

try
{
$this->load->model('whois');
$this->whois->process('domain.-com');
}
catch
{
$this->load->view('errors',$errordata);
$this->load->view('footer');
die;
}

$this->load->view('normal_content');
$this->load->view('footer');

这是使用codeigniter使用异常的建议设置吗?在我的模型中,如果出现问题,该函数将抛出异常。然后catch语句将显示它们并死掉,因此不显示内容..它似乎不正确..?

2 个答案:

答案 0 :(得分:1)

这是我通常处理这个问题的方式:

  1. 将表单发回相同路线
  2. 如果有错误,请再次显示表单,并显示错误状态
  3. 如果一切都过去了,立即重定向到下一步/成功状态
  4. 示例代码:

    <?php
    ...
    
    public function form()
    {
        if (strtoupper($this->input->server('REQUEST_METHOD')) == 'POST')
        {
            try {
                // handle all your validation here
                redirect('success_route');
                exit;
            }
            catch (Exception $e)
            {
                // this could get a little fancier, but a simple solution is to pass the exception
                // directly to the view.  you could also load the `errors` view here, but return the
                // content to a variable and pass to your full view
                $this->load->vars('exception', $e);
            }
        }
    
        $this->load->view('normal_content');
        $this->load->view('footer');
    }
    
    ...
    

答案 1 :(得分:0)

您必须执行以下操作

1)database.php:$ db ['default'] ['db_debug'] = FALSE;

2)在您的模态文件中

try {
   $query_str = "SELECT * FROM `pro_property` WHERE username = '".$username."'";
   $result = $this->db->query($query_str);

   if (!$result)
   {
       throw new Exception('error in query');
       return false;
   }        

   return $result;

} catch (Exception $e) {
    print_r($e);
}