我需要验证登录数据,所以我创建了一个自定义库,它检查用户类型并相应地重定向登录页面。
一切工作,但问题是我试图访问控制器内的其他库是不可访问的,我必须在访问我的自定义库之前添加这些库。
这是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')
查看更多信息图书馆