codeigniter中的错误处理:谁应该调用show_error()

时间:2013-01-08 16:10:14

标签: php codeigniter error-handling

我对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);
      }

从我在模型中的调试print语句中,我知道已经设置了错误消息。但是当控制器尝试使用show_error()方法显示它时,我收到以下错误消息:

  

没有可用的状态文字。请检查您的状态代码或   提供您自己的消息文本。

为了证明它不是因为模型已被破坏,我尝试在我的模型中添加析构函数并打印出调试行......

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

在“在析构函数中”之前打印“错误路径”中的消息,所以我假设模型仍然存在并且很好......

任何建议将不胜感激。

感谢。

更新1

我发现了我的问题。你需要传递一个合法的状态代码,如果你要传递一个。 我以为你可以创建自定义状态号,但它们必须是HTTP代码。但是,如果有人可以在问题1上评论谁应该调用show_error(),那将非常感激。 谢谢。

1 个答案:

答案 0 :(得分:1)

对你的第一个问题的简短回答是否定的,没有“正确”的方法来做到这一点。

在你的问题中,你说:

  

由于我的大部分业务逻辑都在控制器中,所以我决定在那里完成。

这是辩论,可能不是本网站应该进行的辩论,但我发现通常情况下,控制器更像是一个调度员,而不是其他任何东西。所以,你的控制器应该尽可能小。话虽这么说,因为show_error()函数也决定要显示什么视图,我会称之为调度函数并将其放在控制器中。如果您没有使用该函数但是使用log_message()代替将错误存储在日志中并继续处理,那么我会将其放在模型中,因为您可以在使用该函数后继续执行该过程。同样,这是个人选择,可以在任何一个地方完成,但这就是我通常看待它的方式。