Codeigniter 3 - HMVC :: run()& :: load()问题

时间:2016-06-16 19:48:00

标签: codeigniter hmvc

当我尝试基本的东西时,我会遇到问题,让我们说,向用户显示登录表单:我的模块中有一个Users控制器有一个函数login_form()的用户应该显示表单。我的CI文件夹application / controllers / Admin.php中也有一个Controller Admin,它有一个可以调用用户模块的login()函数。

问题:

如果我直接浏览users / login_form,它可以工作并调用login_form()函数。

但是如果浏览了Admin / login并将Users / login_form作为模块调用,我就无法访问modules::run() - 我必须使用modules::load()

我只尝试了一个简单的执行,其中类构造函数和方法只写了他们的名字和&加载路径(请参阅下面的完整代码

测试参数

// URI called : admin/login
// Admin extends MX | Users extends MX 

// called from Admin::login()
$this->users = Modules::load('users')->login_form();

结果

// class constructor - extends
Admin - MX_Controller
# Fx in Admin
Fx : login 

// class constructor - extends
Users - MX_Controller
# Fx in users
Fx : login_form

因此虽然Modules::load()允许我从管理员访问users / login_form方法,但我无法让Modules::run()工作......

测试B(不工作)参数

// URI called : admin/login
// Admin extends MX | Users extends MX 

// called from Admin::login()
$this->users = Modules::run('users/login_form');

结果

// same result as above for Admin

// class constructor - extends 
Users - MX_Controller 
# !! login_form() FROM USERS IS NOT EXECUTED !!

TEST A执行login_form()函数,但是虽然TEST B确实加载了Users Class的构造函数,但它永远不会到达login_form()函数......

我想知道它是否可能是路由问题,但是因为在运行和运行中调用了类Users的构造函数。加载,我怀疑这可能是那个..

完整代码

管理控制器(application / controllers / Admin.php):

class Admin extends MX_Controller
{
    public function __construct()
    {
        parent::__construct();
        echo get_class().' - '.get_parent_class()." [".dirname(__FILE__)."]<br>\n";

    }

    function login()
    {
        echo  "Fx : ".__FUNCTION__."<br>\n";

        // works fine 
        // loads the Users class constructor
        // execute login_form()
        Modules::load('users')->login_form();

        // Does only load User constructor
        // Modules::run('users/login_form');
    }
}

用户控制器(application / modules / users / controllers / Users.php)

class Users extends MX_Controller {

    public function __construct(){
        parent::__construct();
        echo get_class().' - '.get_parent_class()." [".dirname(__FILE__)."]<br>\n";

    }

    public function login_form()
    {
        echo  "Fx : ".__FUNCTION__."<br>\n";
    }
}

0 个答案:

没有答案