根据这个Extending core CI Classes,我可以在我的application / core / MY_Protectedcontroller.php中创建一个类:
//e.g. I want to extend core CI_Controller class.So
class MY_Protectedcontroller extends CI_Controller{
function __construct(){
parent::__construct();
$this->load->library('permission');
$this->load->library('authentication');
}
}
好吧,你可能会在这里看到我的目标......实际上我希望auth和perm库可供所有控制器使用,因此我可以非常容易地以编程方式进行身份验证。但是当我尝试做的时候:
class User extends MY_Protectedcontroller{
function __construct(){
parent::__construct();
.....// relevant codes
.....//relevant codes
}
}
它表示“未找到”的事情。 致命错误:第3行的C:\ xampp \ htdocs \ damcombd \ application \ controllers \ admin \ user.php中找不到类'MY_Protectedcontroller'
答案 0 :(得分:1)
您必须为您的班级文件MY_Controller.php
命名,不 MY_Protectedcontroller.php
。
正如您在user guide中所见,在系统类列表中,MY_Protectedcontroller
不存在。您必须扩展现有类,并且必须为CodeIgniter正确命名才能找到它。在这种情况下,我们正在扩展Controller
,因此您必须将文件命名为MY_Controller.php
,以便CodeIgniter识别并找到它(您可以在配置中更改MY_
,因为您已找到)。如果我们尝试扩展Input类,我们会将文件命名为MY_Input.php
,依此类推。
下载Codeigniter 2.1.4并将它放在一边。
创建MY_Controller.php
并将其放入application/core/MY_Controller.php
:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Protectedcontroller extends CI_Controller
{
function __construct()
{
parent::__construct();
}
}
创建一个控制器test.php
并将其放入controllers/test.php
:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test extends MY_Protectedcontroller
{
function index()
{
echo "test";
}
}
并访问http://localhost/ci-2.1.4/index.php/test
答案 1 :(得分:0)
只需添加require_once就可以了。但是我不喜欢这样的东西。 Coz,Ellislab doc从未说过我需要做这件事......这对我有用:
require_once APPPATH.'core/MY_Protectedcontroller.php';
class User extends MY_Protectedcontroller{
function __construct(){
parent::__construct();
.....// relevant codes
.....//relevant codes
}
}
答案 2 :(得分:0)
您似乎正在瞄准一些非常先进的功能。
您是否会考虑以与CodeIgniter自动加载/system/core/Input.php
文件相同的方式加载权限和身份验证库?这就是您可以轻松拨打$this->input->post();
如果您愿意搞乱系统目录文件,那么我认为它应该像在/system/core/CodeIgniter.php
中查找第208行并使它看起来像这样简单
/* Line 208 starts here
* ------------------------------------------------------
* Load the Input class and sanitize globals
* ------------------------------------------------------
*/
$IN =& load_class('Input', 'core');
/*
* ------------------------------------------------------
* Load the Permission class
* ------------------------------------------------------
*/
$PERM =& load_class('Permission', 'libraries/custom');
/*
* ------------------------------------------------------
* Load the Authentication class
* ------------------------------------------------------
*/
$AUTH =& load_class('Authentication', 'libraries/custom');
并确保将库放在适当的目录中,如下所示:
/system/libraries/custom/Permission.php
/system/libraries/custom/Authentication.php
现在,您应该可以全局访问$this->authentication->someFunc();
和$this->permission->someFunc();
如果您想找到load_class()
功能,请转到/system/core/Common.php
中的第133行并查找function &load_class()