2012-10-07 67 views
3

我有一個網站的默認控制器home。在主頁上有一個登錄表單,按下登錄按鈕調用功能validate_credentials(),這是家用控制器中的一項功能。Codeigniter隱藏功能名稱,但保持功能

當用戶沒有輸入正確的登錄信息,從validate_credentials功能我稱之爲內:

$this->index() 

這基本上重新加載網頁,並與以前的信息的電子郵件地址填寫表單。我會打電話

redirect('home'); 

但我不能預先填寫電子郵件地址表格,除非我創建一個會話變量。

用戶輸入不正確的信息後,讀取網址:

http://www.example.com/home/validate_credentials

我只是想:

http://www.example.com

甚至:

http://www.example.com/home

,但使用路線

$route['home'] = 'home/validate_credentials'; 

它實際上改變被調用的功能。我只是想改變網址。這可能嗎?

回答

1

那麼,我會說會話存儲(尤其是flashdata)是爲了這個確切的目的 - 重定向某處,但傳遞額外的數據。如果你不想,你應該只加載一個沒有重定向的視圖,然後在頁面中使用HTML5歷史API來修改url欄的內容。

1

使驗證過程成爲索引函數的一部分,然後創建一個名爲is_logged_in的會話變量,並在驗證憑據通過時將其設置爲1。

然後,它是做這樣的事情非常簡單:

if($this->session->userdata('is_logged_in')==1) 
{ 
    load the page here. 
} else { 
    load the login stuff here. 
} 

如果他們看到的登錄表單和任何形式的驗證錯誤傳遞迴相同的URL,如果他們是他們沒有登錄這樣登錄他們只是去正常的頁面。