2014-02-20 53 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 
    } 
}