CI中

2011-05-28 40 views
4

增加新的圖書館,我剛開始學習笨,而我繼NETTUTS + this認證教程。我不明白的一兩件事是:CI中

他在歡迎控制器,它基本上只能在會話變量名來訪問添加以下構造函數代碼,否則會重定向到管理控制器。

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

     if (!isset($_SESSION['username'])){ 
      redirect('admin');  
     }  
    } 

他說:

如果你有多個控制器,然後 而不是 每個控制器添加上面的代碼,你應該創建一個 新庫,它擴展了 控制器,你會將代碼粘貼到 中,然後將該庫自動加載到 項目中。這種方式總是在加載控制器時運行 。

這是否意味着,我應該

  1. 創建應用程序/庫(如auth.php)的文件
  2. 在auth.php

這個代碼粘貼。

if (!isset($_SESSION['username'])){ 
      redirect('admin');  
     } 

現在如何自動加載這個庫並在每次加載控制器時運行它,如他所說? 感謝

回答

5

1)自動加載一個庫,只需將其添加到文件application/config/autoload.php中的數組中,查找「庫」部分並粘貼庫名稱(不帶擴展名)數組的元素。

$autoload['libraries'] = array ('auth'); 

2)我建議你使用本地會話處理程序(會話庫),它工作得很好,並且避免了您使用PHP $ _SESSION。您將寬度設置爲$this->session->set_userdata(array('username' => 'User1', 'logged' => 'true'),然後使用$this->session->userdata['logged']檢索值,例如。

就像一個魅力而不必調用session_start()等。去檢查幫助,因爲它真的很清楚。

3)至於你的問題,我會去,而是爲「鉤子」。有不同的鉤子,取決於他們的'位置',即你打電話給他們的時刻。

您可以使用,例如,在控制器初始化之後但在方法之前調用的'post_controller_constructor',因此它位於構造函數和實際方法的中間。我通常在這裏插入這個控件。

您定義的application/config/hooks.php掛鉤,並給他們一個數組:

$hook['post_controller_constructor'] = array(
     'class' => 'Auth', 
     'function' => 'check', 
     'filename' => 'auth.php', 
     filepath' => 'hooks', 
     'params' => array() 
    ); 

無論如何,所有這些需求,文檔是非常清晰簡單,我建議你閱讀掛鉤和會議,你會看到一切變得更清晰!

1

添加新的庫中的config/autoload.php自動加載文庫陣列。

$autoload['libraries'] = array ('database', 'session', 'auth'); 

然後,當你想調用在控制器的功能構造使用$this->auth->function_name();。 您可能要使它成爲一個hook如果有大量的重複功能,你不想來調用每一個構造函數。

1

另一種方法來做到這一點。這是他在教程中的意思。

  1. application/libraries文件夾中創建一個名爲MY_Controller庫和CI_Controller擴展它:

    Class MY_Controller extends CI_Controller { 
        public function __construct() 
        { 
         parent::__construct(); 
         // do the stuff you want to execute on every page. 
         // like auth. 
        } 
    } 
    
  2. 自動載入authautoload.php配置文件。無需自動加載MY_Controller CodeIgniter將自動識別並運行它。您還可以將Auth庫加載到MY_Controller
  3. MY_Controller類擴展您的控制器。 (不是CI_Controller

擴展你的控制器將給你的項目更多的控制權。您可以添加額外的方法在項目中的任何地方使用。

有關擴展CodeIgniter本機庫的更多信息,請參閱Creating Libraries: CodeIgniter