2011-11-02 50 views
3

我需要在每個請求上運行一些代碼,始終取決於用戶是否登錄。CodeIgniter始終運行此代碼

我在哪裏可以放這段代碼?

有沒有我可以傳遞數據的任何可能性,此代碼:

public function __construct() 
    { 
     parent::__construct(); 

     $this->load->helper(array('form', 'url')); 
     $this->load->library('form_validation'); 
     $this->load->library('security'); 
     $this->load->library('tank_auth'); 
     $this->lang->load('tank_auth'); 
     $this->load->model('users_model'); 

     if ($this->tank_auth->is_logged_in()) 
     { 
      $data = $this->users_model->get_userinfo($this->tank_auth->get_username()); 

      if ($data['exp'] >= $data['max_exp']) { 

       $new_data = array(
        'exp' => $data['exp'] - $data['max_exp'], 
        'level' => $data['level'] + 1, 
       ); 

       $this->db->where('id', $data['id']); 
       $this->db->update('users', $new_data); 

       echo 'Hello?'; 
      } 
     } 
    } 

這是MY_Controller,在覈心類。我​​可以通過這個數據進一步?我想,在真實的課堂上重新獲取所有的數據,感覺不太準確。

回答

6

在覈心文件夾下創建一個類,然後讓所有控制器擴展該類。

我做了一個與您所描述的非常相似的登錄系統。

這是核心文件夾中的一類:

class MY_Controller extends CI_Controller{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->library('cart'); 
     $this->load->library('session'); 
     $this->load->library('pagination'); 

     $this->load->helper('form'); 
     $this->load->library('form_validation'); 
     if (!$this->session->userdata('loggedin')){ 
      redirect('/sessions/log_in/','refresh'); 
     } 
    } 
} 

注:請確保您的配置設置正確繼承前綴

然後你在控制器文件夾控制器將延長My_Controller

對於分層登錄或更詳細的示例,請參閱我的舊問題:

Codeigniter: Controlling log in privileges with inheritance

而且教程我根據我的東西掉:問候

http://davidwinter.me/articles/2009/02/21/authentication-with-codeigniter/

答進一步傳遞數據: 使用會話類?

http://codeigniter.com/user_guide/libraries/sessions.html

$this->load->library('session'); 
$this->session->userdata('fieldName') = 1;//*appropriateValue*; 
//Call this in another class 
echo $this->session->userdata('fieldName'); 
+0

更新我的問題 – John

+0

+1 - 偉大的答案和方法我建議這樣做。這裏有另一種你可能會看到的方法:http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY – swatkins