扩展核心CI_Controller

时间:2013-12-26 15:35:22

标签: php codeigniter

根据这个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'

3 个答案:

答案 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()