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


Codeigniter : Default libraries are not accessble after calling custom library

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

一切工作,但问题是我试图访问控制器内的其他库是不可访问的,我必须在访问我的自定义库之前添加这些库。

这是

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

我必须访问控制器,因为我正在检查会话数据。

如果我做错了什么,请告诉我。

为什么在调用类中的函数后定义的默认库不加载。

下面是我从自定义库中调用函数的方法。

$this->access->verify(array('admin'));

这是我得到的错误

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_Controller。因为如果库扩展了CI_Controller。这意味着你实际上是在扩展控制器的功能。

使用

class Access {
不是

class Access extends CI_Controller {

并将以下构造函数添加到库

function __construct()
{
    $this->ci =& get_instance();
}

然后在添加构造函数后,您可以在库中使用$this->ci而不是$this。例如:

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

查看更多信息图书馆