我试图用变量名而不是硬编码的方法名来调用加载模型的方法。这将在我的控制器中为我提供大量的抽象,而不需要使用一堆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');
}