2011-11-18 53 views
4

我正在嘗試爲我的控制器創建一個構造函數,該函數引用一個函數,該函數包含在自動加載的助手中。Codeigniter的構造函數 - 檢查用戶是否登錄

函數檢查用戶是否已登錄,如果是,則將其重定向到登錄頁面。

看來,我還沒有安裝的結構正確,因爲我收到以下錯誤:

Fatal error: Call to undefined method Profile::is_logged_in() 

這是控制器:

<?php 

if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

class Profile extends CI_Controller { 

     public function __construct() 
     { 
      parent::__construct(); 
      //function inside autoloaded helper, check if user is logged in, if not redirects to login page 
      $this->is_logged_in(); 
     } 

    public function index() { 

    echo 'hello'; 

    } 

} 

我只想控制器內使功能如果用戶已登錄,則可訪問。

這是自動加載的幫手

$autoload['helper'] = array('url','array','html','breadcrumb','form','function','accesscontrol'); 

(accesscontrol_helper.php):

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

    function is_logged_in() 
    { 
     $is_logged_in = $this->session->userdata('is_logged_in'); 
     if(!isset($is_logged_in) || $is_logged_in != true) 
     { 
      echo 'You don\'t have permission to access this page. <a href="../login">Login</a>';  
      die();  
      //$this->load->view('login_form'); 
     }  
    } 

爲什麼我不能夠運行的功能?在助手中包含代碼是最好的方法嗎?

回答

9

正如其他已經提到的,助手只是一個函數的集合。擴展他們:

  • 因爲它們有時不止一次加載,你需要指定不聲明一個函數,如果已經存在,你會提出一個錯誤。
  • 此外,如果不首先實例化主要CI對象,則不能在其中調用CI的類。這是使用您的輔助函數更合適的方式:

    if(!function_exists('is_logged_in'))  
    { 
        function is_logged_in() 
        { 
        $CI =& get_instance(); 
        $is_logged_in = $CI->session->userdata('is_logged_in'); 
         if(!isset($is_logged_in) || $is_logged_in != true) 
         { 
         echo 'You don\'t have permission to access this page. <a href="../login">Login</a>';  
         die();  
         }  
        } 
    } 
    

我本來還寄回來代替echo,並移動die()控制器,但這是另一回事。

3

您不使用$this調用幫助函數。只要做到is_logged_in();

public function __construct() 
{ 
    parent::__construct(); 
    //function inside autoloaded helper, check if user is logged in, if not redirects to login page 
    is_logged_in(); 
} 
6

助手只是包含的功能,所以你不需要用$this訪問它。將其稱爲正常功能:

is_logged_in(); 
1

accesscontrol_helper.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Accesscontrol_helper{ 
function is_logged_in() 
{ 
//code 
} 
} 

資料控制器:

class Profile extends CI_Controller { 

     public function __construct() 
     { 
      parent::__construct(); 
      Accesscontrol_helper::is_logged_in(); 
     } 
}