用变量调用Codeigniter模型方法

时间:2012-07-22 14:18:54

标签: php methods

我正在尝试通过变量名称而不是硬编码方法名称来调用加载模型的方法。这将在我的控制器中给我一些抽象,而不使用一堆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上的示例#2完全相同,但我在函数调用的行中收到此错误:< / p>

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

2 个答案:

答案 0 :(得分: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();
  }
}

你必须写下模型的上面第一个字符,如下所示:$this->Reports_model->backlog() http://codeigniter.com/user_guide/general/models.html#anatomy

答案 1 :(得分:1)

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

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