2012-05-05 69 views
0

我试着codeIgniter和模块化扩展。到目前为止,我遵循wiredesignz on bitbucket的安装说明。现在我正在尝试NetTuts的教程HMVC: an Introduction and Application模块加载中断查看加载(旧代码)

我正在用CodeIgniter 2.1的实际版本和Modular Extension的实际版本(从bitbucket下载.zip版本)进行此操作。

所有工作正常,直到我试图从另一个模块的控制器运行一个方法。

设置简而言之,有两个模块(站点&登录)。在站点的控制器内有site.php(/modules/site/controllers/site.php),并且有一个方法用于检查用户是否已登录。如果在未登录的情况下访问站点,此方法将退出脚本执行。由于此方法在逻辑上属于登录模块,作者建议将它移到那里。所以它被移到/modules/login/controllers/login.php

现在的问题是,如何从站点模块内访问登录模块的方法。从本教程中的小幅调整代码:

// modules/site/controllers/site.php 

function __construct() 
{ 
    // parent::Controller(); 
    // replaced with: 
    parent::__construct(); 

    // modules::run('login/is_logged_in'); 
    // replaces with: 
    $this->load->module('login')->is_logged_in(); 
} 

像这样我得到了一个错误:

Unable to load the requested file: logged_in_area.php

问题的方法是在网站模块内部还有:

// modules/site/controllers/site.php 

function members_area() 
{ 
$this->load->view('logged_in_area'); 
} 

该脚本执行直到load->view行并产生错误。有没有问题,从站点控制器内的线路运行is_logged_in方法访问logged_in_area.php

$this->is_logged_in(); 

任何想法?

编辑:

应用程序树:

/application 
    /... 
    /modules 
    /login 
     /controllers 
     login.php 
     /models 
     /views 
     login_form.php 
     signup_form.php 
     signup_successful.php 
    /site 
     /controllers 
     site.php 
     /models 
     membership_model.php 
     /views 
     logged_in_area.php 

PS:我怎样才能得到更多的错误信息?笨似乎是有关错误输出很矜持......

+0

在index.php中,frontcroller中,有一行可以定义您的环境。确保该行说'define('ENVIRONMENT','development');'。这样,你会得到所有的错误。 – Zombaya

+0

它被设置为'development'。错误报告是'E_ALL'。没有改变任何东西。 – fourreux

+0

然而,我认为你不应该从其他模块加载视图。我认为模块化扩展的概念是可以调用其他控制器,而不是其他视图。我建立了一个图书馆来处理我的登录状态和一切。这样你就可以在任何地方使用它。然后,您仍然可以创建一个模块来显示登录形式和所有内容。 – Zombaya

回答

0

如文档here中指出,从另一个模块中加载一个视图,您需要使用扩展MX控制器和方法:

<?php echo Modules::run('module/controller/method', $param, $...); ?>

+0

我们走吧!我有我的site.php扩展'CI_Controller'。用'MX_Controller'代替它就行了。但是,我仍然不加载另一个模块的视图!通过简单的'CI_Controller',另一个控制器的“跨模块”加载工作正常......不需要了解所有内容...... – fourreux