Php Codeigniter:调用自定义库后,无法访问默认库

Php Codeigniter:调用自定义库后,无法访问默认库,php,codeigniter,Php,Codeigniter,我需要验证登录数据,因此我创建了一个自定义库,它在其中检查用户类型并相应地重定向登录页面 一切正常,但问题是我在控制器内尝试访问的所有其他库都无法访问,我必须在访问自定义库之前添加这些库 $this->access->verify(array('admin')); 这很有效 public function __construct() { parent:: __construct(); $this->load->model("De

我需要验证登录数据,因此我创建了一个自定义库,它在其中检查用户类型并相应地重定向登录页面

一切正常,但问题是我在控制器内尝试访问的所有其他库都无法访问,我必须在访问自定义库之前添加这些库

$this->access->verify(array('admin'));
这很有效

public function __construct() 
    {
        parent:: __construct();
        $this->load->model("Delivery_agents_model");
        $this->load->helper('form');
        $this->load->library('form_validation');
        $this->load->library('access');
    }
但这不起作用

<?php if( ! defined('BASEPATH')) exit('No direct script access allowed');
class Access extends CI_Controller {
    public function verify($access) 
    {
        if ( (array) $access !== $access )
        {
            switch ($access) 
            {
                case 'admin':
                    if (! $this->session->userdata('admin_logged_in'))
                    {
                        redirect(base_url('admin/login'));                      
                    }
                    break;
                case 'delivery_agent':
                    if (! $this->session->userdata('delivery_agent_logged_in'))
                    {
                        redirect(base_url('delivery_agent/login'));
                    }
                    break;
            }
        }
        else
        {
            $logged_in = FALSE;

            foreach ($access as $access_type) 
            {
                switch ($access_type) 
                {
                    case 'admin':
                        if ($this->session->userdata('admin_logged_in'))
                        {
                            $logged_in = TRUE;
                        }
                        break;
                    case 'delivery_agent':
                        if ($this->session->userdata('delivery_agent_logged_in'))
                        {
                            $logged_in = TRUE;
                        }
                        break;
                }

            }

            if (! $logged_in)
            {
                switch ($access[0]) 
                {
                    case 'admin':
                        redirect(base_url('admin/login'));
                        break;
                    case 'delivery_agent':
                        redirect(base_url('delivery_agent/login'));
                        break;
                }
            }
        } 
    }
}
这是我得到的错误

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Delivery_agents::$form_validation

Filename: controllers/delivery_agents.php

Line Number: 104


Fatal error: Call to a member function set_rules() on a non-object in /var/www/project/application/controllers/delivery_agents.php on line 104

问题是您正在扩展库中的CI_控制器。因为如果您的库扩展了CI_控制器。这意味着您实际上是在扩展控制器的功能

使用

而不是

class Access extends CI_Controller {
并将以下构造函数添加到库中

function __construct()
{
    $this->ci =& get_instance();
}
然后,在添加构造函数之后,您可以在库中使用
$this->ci
而不是
$this
。例如:

$this->ci->session->userdata('admin_logged_in')

有关详细信息

谢谢!完美答案。最初我添加了$this->ci=&get_instance();但是在构造函数中没有,所以它不起作用。
$this->ci->session->userdata('admin_logged_in')