2016-08-02 68 views
0

我在CodeIgniter中创建了一个控制整个管理员的控制器。如果需要,它将加载另一个控制器,具体取决于URL。它工作正常,但由管理员控制器加载的控制器无法访问数据库。CodeIgniter控制器无法加载数据库

这是我的代码在管理控制器加载必要的控制器。

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); 
} 

该数据库位于自动加载文件中,因此它将被加载。

在管理员控制器或其中一个模型中,我可以访问数据库,因此数据库配置和自动加载也适用于主控制器。

你知道会是这个问题吗?我希望有人能帮助我解决这个问题。

+0

这是自动加载和正常工作,但只有主控制器具有$ DB属性和其他人没有。 – kukko

+0

我发现这个问题,因为HMVC扩展我会扩展MX_Controller而不是MY_Controller。对不起,我没有在问题中提到如何使用HMVC。但是我接受@ g9m29的回答,因为这真的很有帮助。 – kukko

回答

1

您可以进一步改进您的应用逻辑设计,因为我认为这不是最佳选择。为了您的需要,尽管您可以尝试使用此方法。

private static $db; 
    function __construct() { 
    parent::__construct(); 
    self::$db = &get_instance()->db; 
    } 

尝试添加私有静态$ db变量到您的控制器并在__construct中创建一个数据库实例。然后,你可以继续使用你的数据库像self::db->get()->result()-> etc.

+0

我会在每个由主控制器加载的控制器中加入这个功能吗? – kukko

+0

它没有工作,我仍然在$ db属性的每个控制器中都为null。 – kukko

+0

是的,除了你的控制器之外,每个控制器都可以使用所有CI的资源。如果这些控制器是从CI内部调用的,并且是CI的“通用”控制器,并且扩展了主CI_Controller或MY_Controller,那么请为您的主控制器和一个子控制器提供完整的代码,以便我们可以看到耦合错误的位置。 – g9m29

0

试试这个在构造:

function __construct(){ 
$this->load->database(); 
} 
+0

我已经试过这个,并没有工作。 – kukko

相关问题