Php Codeigniter构造函数-检查用户是否已登录

Php Codeigniter构造函数-检查用户是否已登录,php,oop,codeigniter,Php,Oop,Codeigniter,我正在尝试为我的控制器创建一个构造函数,该构造函数引用我在自动加载的助手中包含的函数 该函数检查用户是否已登录,如果已登录,则会将用户重定向到登录页面 似乎我没有正确设置构造,因为我收到以下错误: Fatal error: Call to undefined method Profile::is_logged_in() 这是控制器: <?php if (!defined('BASEPATH')) exit('No direct script access allowed');

我正在尝试为我的控制器创建一个构造函数,该构造函数引用我在自动加载的助手中包含的函数

该函数检查用户是否已登录,如果已登录,则会将用户重定向到登录页面

似乎我没有正确设置构造,因为我收到以下错误:

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';

    }

} 
class Profile extends CI_Controller {

       public function __construct()
       {
            parent::__construct();
            Accesscontrol_helper::is_logged_in();
       }
}
(accesscontrol\u 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');
        }       
    }

您不能使用
$this
调用助手函数。只需执行
是否已登录()


助手只是包含的函数,因此您不需要使用
$this
访问它。只需将其作为普通函数调用:

is_logged_in();
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();      
       }       
    }
}

正如前面提到的,helpers只是一个函数集合。对其进行扩展:

  • 由于它们有时会被多次加载,因此需要指定不声明函数(如果已经存在),否则将引发错误
  • 此外,如果不先实例化主CI对象,就不能调用它们内部的CI类。这是使用助手函数的更合适的方法:

    is_logged_in();
    
    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();      
           }       
        }
    }
    
    如果(!function_存在('is_logged_in'))
    {
    函数已登录()
    {
    $CI=&get_instance();
    $is_logged_in=$CI->session->userdata('is_logged_in');
    如果(!isset($is_logged_in)| |$is_logged_in!=true)
    {
    echo“您没有访问此页面的权限”;
    模具();
    }       
    }
    }
    

我还希望它返回而不是echo,并将
die()
移动到控制器,但这是另一回事。

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