【问题标题】:Module load breaks view load (old code)模块加载中断视图加载(旧代码)
【发布时间】:2012-05-05 13:35:51
【问题描述】:

我正在试用 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();
}  

像这样我收到一个错误:

无法加载请求的文件: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:如何获得有关错误的更多信息? CodeIgniter 似乎对错误输出非常保留...

【问题讨论】:

  • 在 index.php 中,frontcroller,有一行你定义你的环境。确保该行显示define('ENVIRONMENT','development');。这样,您将得到所有错误。
  • 设置为development。错误报告是E_ALL。那里没有改变任何东西。
  • 我认为,您不应该从其他模块加载视图。我认为模块化扩展的概念是你可以调用其他控制器,而不是其他视图。我制作了一个库来处理我的登录状态和所有内容。这样你就可以在任何地方使用它。然后,您仍然可以创建一个模块来显示登录表单和所有内容。
  • 我不是从另一个模块加载视图,而是一种检查登录状态的方法。这在我看来是合乎逻辑的。我尝试加载的视图与(该视图的)调用方法位于同一模块中。但是,我会向图书馆暗示。接下来我会调查。
  • 那我就帮不了你了。你所做的对我来说似乎也是合乎逻辑和有效的。我自己没有使用过 HMVC。您可以尝试向 MX_Loader 添加一些 debug_statements。你可以查看日志文件,里面可能有很多信息。

标签: php codeigniter codeigniter-2


【解决方案1】:

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

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

【讨论】:

  • 我们开始了!我让我的 site.php 扩展了CI_Controller。用MX_Controller 替换它就可以了。但是,我仍然没有从另一个模块加载视图!并且通过简单的CI_Controller,另一个控制器的“跨模块”负载可以工作......好吧......不必了解所有内容......
猜你喜欢
  • 2017-01-04
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多