2010-09-24 66 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() || ''; 
相關問題