通过变量调用Codeigniter模型方法


Calling Codeigniter Model Methods by Variable

我试图用变量名而不是硬编码的方法名来调用加载模型的方法。这将在我的控制器中为我提供大量的抽象,而不需要使用一堆if-then语句。

这是型号

class Reports_model extends CI_Model {
  public function __construct()
  {
    $this->load->database();
  }
  public function backlog()
  {
    //Do stuff
  }

我想要的是能够通过变量名调用backlog函数。这是控制器:

class Reports extends CI_Controller {
  public function __construct() {
    parent::__construct();
  }
  public function get_reports($report_name)
  {
    $this->load->model('reports_model');
    $report_name = 'backlog';
    $data['data'] = $this->reports_model->$report_name();
  }

据我所知(我可能遗漏了一些愚蠢的东西),我的代码与http://php.net/manual/en/functions.variable-functions.php,但我在函数调用的行中得到了这个错误:

未定义的属性:Reports::$Reports_model

您可以为该模型使用自动加载器。自动加载器文件位于appapplication/config/文件夹中。你必须在中建模

$autoload['model'] = array('Reports_model');

或者你可以使用

class Reports extends CI_Controller {
  public function __construct() {
    parent::__construct();
    $this->load->model('Reports_model');
  }
  public function get_reports($report_name)
  {
    $report_name = 'backlog';
    $data['data'] = $this->Reports_model->backlog();
  }
}

您必须这样写模型的第一个字符:$this->Reports_model->backlog()http://codeigniter.com/user_guide/general/models.html#anatomy

您没有加载报表模型,请更改控制器中的构造函数:

 public function __construct() {
    parent::__construct();
    $this->load>model('Reports_model');
  }