0

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

这是模型

class Reports_model extends CI_Model {

  public function __construct()
  {
    $this->load->database();
  }

  public function backlog()
  {
    //Do stuff
  }

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

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上的示例 #2 完全相同,但我得到了函数调用行中的此错误:

未定义属性:Reports::$reports_model

4

2 回答 2

2

您可以为此模型使用自动加载器。Autoloader 文件位于 appilication/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();
  }
}

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

于 2012-07-22T14:27:49.933 回答
1

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

 public function __construct() {
    parent::__construct();
    $this->load>model('Reports_model');
  }
于 2012-07-22T14:22:19.747 回答