2013-07-28 38 views
1

我對CI的MVC模型非常陌生。CodeIgniter跨所有頁面登錄

我有一個由3個視圖組成的簡單頁面。標題,內容和頁腳。內容在整個網站中都是唯一的,但是頁眉和頁腳將是相同的,無論是哪個頁面。

在我的頭我有一個登錄形式。因此,整個網站將會有一個登錄表單。因爲它出現在每一頁具有差異機型上:

怎麼會或者我會寫的腳本在用戶登錄,因爲我不喜歡在每一個標題上使用的模型編寫登錄腳本.. 。

也許另外一個例子:

如果這是不明確的,我嘗試另一個例子。假設我有一個網站。在這個頁面中加載一個頁腳的視圖。頁腳包含一個表單。現在,當我使用該表單發佈數據時,它應該在哪裏發送數據?

顯示它去它處理從表單中的所有帖子的專用PHP文件,還是應該去到當前頁面」控制器?

我希望我很清楚。我再次剛剛開始使用CI和MVC。如果你能指導我,那會很好。

+0

那麼究竟你使用的是什麼? CodeIgniter或MVC?因爲沒有實現另一個,FYI。 –

+0

@tereško好了,經過一段時間,我發現我需要hmvc來支持模塊/部件/局部視圖等 – Krimson

回答

1

當我使用該表格發佈數據時,應該將數據放在哪裏?

你不應該寫在每一頁(控制器)的邏輯。你應該做的是創建一個獨特的控制器(如Accounts)來管理用戶日誌。

登錄表單應該將數據上傳到accounts/login URL。但要回到上一頁,我們應該在會話中存儲當前網址爲referer

爲了做到這一點,只是存儲在uri_string();每次需要頁面上的會話。

$this->session->set_userdata(array(
    'referer' => $this->uri->uri_string() 
)); 

如果您不需要將用戶重定向到上一頁,請忽略它。

下面的例子說明如何實現目標:

class Accounts extends CI_Controller { 

    public function login() 
    { 
     $config = array(
      // Write your validation rules here 
     ); 

     $this->load->library('form_validation'); 
     $this->form_validation->set_rules($config); 

     // Check whether form is submitted 
     if (isset($_POST['submit'])) { 

      if ($this->form_validation->run() == FALSE) { 
       $data['login_errors'] = validation_errors(); 
       // Store validation errors in session 
       // to display on every page needed 
       $this->session->set_userdata($data); 
      } else { 

       // Login process 
       // Set user detail in session 

       // Redirect to previous page after login 
       if ($referer = $this->session->userdata('referer')) { 
        $this->session->unset_userdata('referer'); 
       } else { 
        $referer=''; 
       } 

       redirect(base_url().$referer); 
      } 

     } 
    } 

    public function logout() 
    { 
     // Destroy the session 
     $this->session->sess_destroy(); 
     redirect(base_url()); 
    } 
} 
+0

完美,這就是我一直在尋找的。謝謝!另外我看了一下hmvc,看起來很酷,因爲它允許你在你的網站上有模塊/部件/局部視圖 – Krimson

0
  1. 創建具有全局函數
  2. 把功能在配置autoload.php下的「模型」模型
  3. 您可以從任何地方調用這個模式,而無需加載它