CodeIgniter:在一次调用中调用多个控制器

时间:2010-09-24 10:25:04

标签: php model-view-controller architecture codeigniter

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

尝试将类似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() || '';