【问题标题】:CodeIgniter: invoking multiple controllers in one callCodeIgniter:一次调用多个控制器
【发布时间】:2011-04-16 17:06:19
【问题描述】:

我正在解决 CI 内部的一种架构问题。 我需要能够在主控制器中实例化其他控制器及其方法。 例如

*main.php/function index():*
$controller2 = new Controller2();
$data['pre_loaded_data'] = $controller2 ->ajax_get_some_view(array('static'=>true));

这种方法背后的目标是构建加载一些屏幕部件的 ajax 应用程序 在第一次加载时静态加载,作为主 html 页面的一部分,但后来这些部分使用 ajax 方法更新以从各种其他控制器(此时使用 array('static'=>false) 参数),例如作为对 onclick 事件的响应主页。

问题在于 CI 似乎没有被设计为支持多个控制器,并引发各种与加载器相关的错误,报告某些类即使在加载时也没有加载。

在主控制器中预加载来自其他控制器的数据的最佳方法是什么?

【问题讨论】:

  • 您正在使用 AJAX 加载段以在 PHP 中进行组合?除非我错过了什么,那完全是精神上的。
  • 第一次加载页面时,为了速度,我使用名为 ajax_something 的控制器 php 方法来静态加载初始数据。稍后可以使用 js/ajax 更新这些块。这可以是控制器内部的内部调用,也可以是来自外部的 ajax/js 调用。这还是心理吗?

标签: php model-view-controller architecture codeigniter


【解决方案1】:

您可能希望创建控制器将继承的基类。您还可以考虑使用Modular Extensions 尝试使用HMVC。

这是 Phil Sturgeon 关于基类的great read 以及如何实现它们。

【讨论】:

    【解决方案2】:

    尝试将 get_some_data() 之类的函数放在库中,然后您将能够毫无问题地从每个控制器和每个函数中包含和调用它们,将结果以部分视图(静态情况)格式发送或返回到ajax 调用后的浏览器。

    永远记住只处理模型和库中的数据。这样您就不必担心控制器冲突了。

    // main/index
    $this->load->library('your_library');
    $data['foo'] = $this->your_library->get_foo();
    
    // controller2/get_some_ajax_data
    $this->load->library('your_library');
    echo $this->your_library->get_foo() || '';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2011-09-23
      • 2013-06-27
      • 2017-07-22
      相关资源
      最近更新 更多