我在CodeIgniter中创建了一个控制器来控制整个管理员。如果需要,它会加载另一个控制器,具体取决于URL。它可以正常工作,但由管理员控制器加载的控制器无法访问数据库。
这是管理员控制器中的代码,它加载了必要的控制器。
public function renderAdmin(){
$get=$this->input->get();
if (!empty($get['module'])){
$module=$get['module'];
}
else{
$module="";
}
if (!empty($module)){
if (!empty($get['method'])){
$method=$get['method'];
}
else{
$method="index";
}
$module=modules::load($module."/".$module);
if (!method_exists($module, $method)){
$method="index";
}
$module->$method();
}
else{
$data['screen']=$this->config->item('foo_template_dir_admin')."index";
$data['menuPoints']=self::getMenuPoints();
$this->load->view($this->config->item('foo_template_dir_admin') . "frame", $data);
}
}
当我加载时,例如标签控制器,它无法加载数据库。
public function index(){
$data['menuPoints']=Admin::getMenuPoints();
$data['screen']=$this->config->item('mindenrekepes_template_dir_admin')."tags/index";
var_dump($this->db); // NULL
$this->load->view($this->config->item('mindenrekepes_template_dir_admin')."frame", $data);
}
数据库位于自动加载文件中,因此将加载它。
在Admin控制器或其中一个模型中,我可以访问数据库,因此数据库配置和自动加载也在主控制器中。
你知道会出现问题吗?我希望在这种情况下有人可以帮助我。
答案 0 :(得分:1)
您可以进一步改进您的应用逻辑设计,因为我认为这不是最佳选择。根据您的需要,您可以尝试使用此方法。
private static $db;
function __construct() {
parent::__construct();
self::$db = &get_instance()->db;
}
尝试将private static $ db变量添加到控制器并在__construct中创建数据库实例。然后,您可以继续使用您的数据库,如self::db->get()->result()-> etc.
答案 1 :(得分:0)
在构造函数中尝试:
function __construct(){
$this->load->database();
}