Codeigniter扩展了扩展的MY_Controller

tok*_*tok 9 php codeigniter

我严格按照Phil Sturgeon的方法文章来扩展基本控制器.但我仍然有一些错误.

我的3个班:

// application/libraries/MY_Controller.php
class MY_Controller extends Controller{
    public function __construct(){
        parent::__construct();
    }
}

// application/libraries/Public_Controller.php
class Public_Controller extends MY_Controller{
    public function __construct(){
        parent::__construct();

    }    
}

// application/controllers/user.php
class User extends Public_Controller{
    public function __construct(){
        parent::__construct();
    }
}
Run Code Online (Sandbox Code Playgroud)

致命错误:第2行的/srv/www/xxx/application/controllers/user.php中找不到"Public_Controller"类

好奇的是,如果我直接扩展,以下代码片段正在工作MY_Controller:

// application/controllers/user.php
class User extends MY_Controller{
    public function __construct(){
        parent::__construct();
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过__autoload()或手动加载了控制器.控制器成功加载.

CI版本:1.7.3

Tee*_*eej 7

您需要在MY_Controller中需要Public Controller

// application/libraries/MY_Controller.php
class MY_Controller extends Controller{
    public function __construct(){
        parent::__construct();
    }
}

require(APPPATH.'libraries/Public_Controller.php');
Run Code Online (Sandbox Code Playgroud)

您收到错误,因为从未加载Public_Controller.这样做可以让你扩展Public_Controller

我喜欢你在做什么,因为我一直这样做.

当您想要创建Admin_Controller时,也可以在MY_Controller中执行此操作

// application/libraries/MY_Controller.php
class MY_Controller extends Controller{
    public function __construct(){
        parent::__construct();
    }
}

require(APPPATH.'libraries/Public_Controller.php'); // contains some logic applicable only to `public` controllers
require(APPPATH.'libraries/Admin_Controller.php'); // contains some logic applicable only to `admin` controllers
Run Code Online (Sandbox Code Playgroud)

  • 如果__autoload正在运行,则不需要这样做. (2认同)

jon*_*ohn 5

你应该把Public_controllerMY_Controller里面MY_Controller.php

// application/libraries/MY_Controller.php
class MY_Controller extends Controller{
    public function __construct(){
        parent::__construct();
    }
}

class Public_Controller extends MY_Controller{
    public function __construct(){
        parent::__construct();

    }    
}
Run Code Online (Sandbox Code Playgroud)

我在任何地方使用__construct它工作正常我最近写了一篇关于如何将auth逻辑包装到扩展控制器中的文章.当我开始讨论构建控制器时,这大概只有一半.