2010-09-24 97 views
0

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

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

这种方法的目标是建立它加载一些屏幕部分 静态地在第一负载,如主HTML页面的一部分Ajax应用程序,但后来这些部分与各种其他控制器的AJAX方法(更新此时使用数组('static'=> false)参数),例如作为对主页上的onclick事件的响应。

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

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

+1

您是否正在使用AJAX加载段以便在PHP中进行组合?除非我错过了一些东西,那完全是精神上的。 – 2010-09-24 14:13:17

+0

第一次加载页面时,我使用名为ajax_something的控制器php方法静态加载初始数据以获得速度。稍后可以使用js/ajax更新这些块。这既可以是控制器内部的内部调用,也可以是外部的ajax/js调用。这仍然是精神? – AlexA 2010-09-24 19:38:09

回答

3

您可能想要创建控制器将继承的基类。您也可以考虑使用Modular Extensions来尝试使用HMVC。

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

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() || ''; 
相关问题