从会话中回显用户名而不在每个控制器中定义

时间:2013-01-15 13:00:26

标签: php codeigniter session session-variables

  

可能重复:
  echo user in view from sessions code igniter

我不想在每个控制器中定义和存储用户,然后将其传递给视图。 这是我的控制者:

登录控制器:

class LoginController extends CI_Controller {
    function index(){       
        $new['main_content'] = 'loginView';
        $this->load->view('loginTemplate/template', $new);          
    }

    function verifyUser(){

    //getting parameters from view 
    $data = array(
            'username' => $this->input->post('username'),
            'password' => $this->input->post('password')
    );      

    $this->load->model('loginModel'); 
    $query = $this->loginModel->validate($data);

    if ($query){             
        //if the user c validated data variable is created becx we want to put username in session

            $data = array(
                'username' => $this->input->post('username'),
                 'is_logged_in' => true 
            );

           $this->session->set_userdata($data);
           redirect('sessionController/dashboard_area');
    }else{
        $this->index();
    }
}
function logout()
{
    $this->session->sess_destroy();
    $this->index();
}
}



?>

我的控制器,我已经存储在核心文件夹中,所以现在每个控制器都扩展了这个控制器。我认为这个控制器可以自定义,所以我可以在扩展这个控制器的每个视图页面中访问用户:

   class MY_Controller extends CI_Controller{
        function __construct(){
    parent::__construct();
    $this->is_logged_in();

    }   
    function dashboard_area(){
    $data['main_content'] = 'dashboardView';
    $this->load->view('dashboardTemplate/template', $data);         
    }

function is_logged_in()
{
    $is_logged_in = $this->session->userdata('is_logged_in');

    if(!isset($is_logged_in) || $is_logged_in != true)
    {
        echo 'You don\'t have permission to access this page.';
        redirect('loginController');
    }
}


           }
?>

这是我简单的一个成员控制器,它扩展了上面的控制器: 在索引函数中,我存储了用户名,然后传递到我不想做的视图中:

     class CategoryController extends MY_Controller {
   function index(){         
    $data['main_content'] = 'categoryView';         
    $username= $this->session->userdata('username');
    $data['username']=$username;
    $this->load->view('dashboardTemplate/template',$data);
      }

1 个答案:

答案 0 :(得分:3)

您只需在视图中拨打$this->session->userdata('username')即可。

它存储在会话中,因此您不必将其传递给控制器​​的视图。

更新评论;
如果你想根据基本控制器(例如用户)加载视图,我会使用template library并设置模板以在基本控制器的构造中使用。

例如(使用此template library);

class MY_User extends CI_Controller {
   public __construct() {
      parent::__construct();
      $this->is_logged_in();
      $this->template->set_template('user');
   }
}

class MY_Admin extends CI_Controller {
   public __construct() {
      parent::__construct();
      $this->is_logged_in();
      $this->template->set_template('admin');
   }
}