2014-02-20 49 views
-2

我在我的应用程序中有一个主菜单,它加载取决于我从我的数据库中的表验证用户的角色,但我必须重新创建此菜单我每次调用一个新的控制器,这里是我做的方式:CodeIgniter维护数据通过控制器

用户控制器:

class User extends Ci_Controller { 

    function __construct(){ 

     parent::__construct(); 

     if (!$this->session->userdata('session_user')) { 
      $this->session->set_flashdata("mensaje", 'No cuenta con permisos *'); 
      redirect(); 
      $this->session_usuario = 1; 
     } 

     $session_data = $this->session->userdata('session_user'); 
     $image  = $session_data['img']; 
     $nickname  = $session_data['nick']; 
     $res   = ""; 

     $this->layout->setLayout('layout/admin'); 
     $this->layout->setImage(base_url().$image); 
     $this->layout->setNick($nickname); 

     $data['module'] = $this->usuarios_model->seleccionarModulos($session_data['perfil']); 

     for ($i=0; $i < count($data['module']) ; $i++) {              
      $info['functionality'] = $this->usuarios_model->seleccionarFuncionalidades( $session_data['usuario'], $data['module'][$i]['id']); 
      $data['module'][$i]['route'] = $this->load->view($data['module'][$i]['route'], $info, true); 
     } 

     foreach ($data['module'] as $key => $value) { 
      $res .= $value['route']; 
     }  

     $this->layout->setMenu($res); 

    } 

,准确的支持控制器相同:

class Support extends Ci_Controller { 

    private $user; 
    private $permiso; 
    private $order; 

    function __construct(){ 

     parent::__construct(); 

     if (!$this->session->userdata('session_user')) { 
      $this->session->set_flashdata("mensaje", 'No cuenta con permisos *'); 
      redirect(); 
      $this->session_usuario = 1; 
     } 

     $session_data = $this->session->userdata('session_user'); 
     $image  = $session_data['img']; 
     $nickname  = $session_data['nick']; 
     $res   = ""; 

     $this->layout->setLayout('layout/admin'); 
     $this->layout->setImage(base_url().$image); 
     $this->layout->setNick($nickname); 

     $data['module'] = $this->usuarios_model->seleccionarModulos($session_data['perfil']); 

     for ($i=0; $i < count($data['module']) ; $i++) {              
      $info['functionality'] = $this->usuarios_model->seleccionarFuncionalidades( $session_data['usuario'], $data['module'][$i]['id']); 
      $data['module'][$i]['route'] = $this->load->view($data['module'][$i]['route'], $info, true); 
     } 

     foreach ($data['module'] as $key => $value) { 
      $res .= $value['route']; 
     }  

     $this->layout->setMenu($res); 

    } 

我知道它的错误的方式解决这个问题,我想改进它并重用代码。

回答

1

一个快速的解决方案是创建一个自定义的控制,并拥有所有你延长该:

里面的core目录下创建一个MY_Controller.php控制器:

需要的代码
class MY_Controller extends CI_Controller 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    // your common code here 
    } 
} 

所有孩子控制器:

class User extends MY_Controller 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    // this will inherit the MY_Controller constructor 
    } 
}