2012-10-12 53 views
0

可能重複:
Constructor session validation for different functions防止重複碼驗證笨

框架:CI(笨)

情況

我有4頁(控制器)即:

home login dashboard editprofile

ACCESS

  • 可以由所有類型的用戶進行訪問,登錄或不是

  • 登錄必須只能是訪問,如果沒有通過認證

  • 儀表盤和editprofile必須由學生(認證用戶)

我有這個validatation我的控制器,這樣訪問:

if($this->session->userdata('isLoggedIn')){ 
    // stay here do the function 
} else { 
// leave this page 
    header('Location:'.base_url().'login'); 
} 

我在那function index(){}

但正如我開發的系統,爲我創造更多的方法,更多的控制器,它變得混亂.. 你需要使用這個,你有一個方法

if($this->session->userdata('isLoggedIn')){ 
// stay here do the function 
} else { 
// leave this page 
header('Location:'.base_url().'login'); 
} 

每次,

我已經閱讀了幾個問題在stackoverflow ...唯一最好的答案是這樣的:這裏的鏈接

它說,我必須使用裝飾模式...但我不清楚如何,我想做那。

+0

其他任何前綴[這是你所需要的。(http://stackoverflow.com/a/12486869/568884) –

回答

2

爲每種類型的用戶創建不同的基礎控制器,然後您只需設置該語句一次。我們的用戶控制器看起來是這樣的:我們只想要登錄的用戶訪問擴展User_Controller自動確保任何功能僅如果你已經登錄

<?PHP 
class User_Controller extends MY_Controller 
{ 
function __construct() 
{ 
    parent::__construct();  
    if (!$this->session->userdata('is_logged_in')) { 
     $this->session->set_flashdata('message', "I'm sorry, but you must be logged in to view that page."); 
     redirect("/"); 
    } 
} 
} 

那麼任何控制器,您需要將此保存到核心文件夾能夠擴展它。

您還需要將此添加到您的配置。PHP有基本控制器比MY_

function __autoload($class) 
{ 
if(strpos($class, 'CI_') !== 0) 
{ 
    @include_once(APPPATH . 'core/'. $class . EXT); 
} 
} 
+0

感謝了,我認爲這是真的回答。 –