我想通過變量名稱而不是硬編碼的方法名稱來調用加載模型的方法。這將使我在我的控制器中獲得很多抽象,而不使用大量if-then語句。通過變量調用Codeigniter模型方法
這裏的型號
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();
}
從我可以告訴(我可能失去了一些東西愚蠢的),我的代碼是完全一樣實例#2 http://php.net/manual/en/functions.variable-functions.php,但我在的行收到此錯誤函數調用:
未定義的屬性:報告:: $ reports_model
第二個答案肯定會起作用,但我希望沒有在每個模型方法的控制器中有一個方法,所以我希望顯示在Controller中有一個方法來調用模型中的同名方法而不必指定(如果這是有道理的)。稍後在不改變代碼的情況下添加東西會變得更加靈活。 – VPel 2012-07-22 14:31:29
好的,你可以使用codeigniter路由器來解決這個問題。 (http://codeigniter.com/user_guide/general/routing.html)創建一個rooter和所有請求調用相同的控制器方法。在這個方法中,你可以使用'call_user_func'默認的php函數。 http://php.net/manual/en/function.call-user-func.php#example-4726 – hkulekci 2012-07-22 14:39:29
好吧,在兩個地方的首都R確實有效,這是奇怪的,因爲我實際上有100其他這些模型負載/方法調用正在濫用套管和那些工作。 – VPel 2012-07-22 14:49:15