CodeIgniter控制器无法加载数据库

时间:2016-08-02 11:37:42

标签: php codeigniter

我在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控制器或其中一个模型中,我可以访问数据库,因此数据库配置和自动加载也在主控制器中。

你知道会出现问题吗?我希望在这种情况下有人可以帮助我。

2 个答案:

答案 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();
}