模型中的“报告”错误

时间:2012-03-11 00:09:12

标签: php codeigniter error-handling

我正在考虑返回模型中出现的错误,方法如下:

class Data extends CI_Model {  
     private $errors_list

     private function Set_error($control,$error_string){
          $this->errors_list[][$control] = $error_string; 
     } 

     public function Get_errors($control){
          // logic
          return $errors_array;
     }

     public function Data(){
          // error happens
          $this->set_error('User','Your db seems to be empty!');
          $this->set_error('Dev','// DB error in full');
          return false;
     }
}

这样我可以在控制器上对待它们:

class Data extends CI_Controller {
     public function index(){
          $this->load->model('Data');
          $data = $this->data->data();
          if(!$data)
          // send $this->data->get_errors() to user and logs
          else
              // send $data to view
     }
}

这是个好主意吗?有哪些潜在的缺点,是否有更好的方法来处理数据库操作/数据验证错误?

新“证据”:http://www.firehed.net/mvc-model-data-validation

2 个答案:

答案 0 :(得分:0)

CRUD适用于该型号。更好的是让模型将异常抛回控制器。控制器抓住它并做任何需要做的事情。

型号:

class Data_model extends CI_Model {  
    public function getData($id){
        if( /* something worthy of an error */) {
            throw new Exeption('Your db seems to be empty!');
        }    
    }
}

控制器:

class Data extends CI_Controller {
    public function index(){
        $this->load->model('Data_model','', 'data');
        try {
            $data = $this->data->getData();
        } catch (Exception $e) {
            // send $e->getMessage() to user and logs
        }
        // send $data to view
    }
}

答案 1 :(得分:0)

@ localhost2你的方式很有意义。实际上模型验证错误应该属于模型控制器不应该保存除闪存消息之外的任何错误列表(即成功...)。因此,保存模型中的错误并将模型发送到视图,在视图中,您可以提取错误。