2012-03-02 86 views
0

我使用Codeigniter和MVC模式創建應用程序。 我現在想創建一個可重用的管理工具,用於不同的對象,如條目,用戶,類別。我需要跨越不同的控制器和視圖以及多個時間的特定工具集。MVC和在模型中查看

我希望能夠調用類似$this->load_admin_tools($name,$data)其中$name將成爲工具集的名稱(這將只是一個HTML表單)和$data必要的變量來處理那些形式(最有可能$id的對象)。

我想這樣做,這樣我就可以在一個地方添加或刪除一些工具。

我想創造一個model_admin_tools,我將檢查的權限是否應顯示工具,然後裝入適當的視圖(表格刪除/編輯/ etc)。我知道那些應該是一個控制器(爲了檢查權限,然後決定是否顯示某些東西),但是一遍又一遍地重複相同的代碼,這對我來說比將它們放在模型中是最糟糕的。我可以在控制器中創建私人功能,但是我不得不將這個功能放在我的所有控制器中。

有沒有更好的方法來實現這一目標?我在想助手,但同樣,助手不是爲了「觀看」。或者,我可能太委婉?

在此先感謝。

回答

1

在視圖中使用助手並不差。我一直在我的視圖中使用的一個助手是url助手。

如果你想一組可以在多臺控制器可以使用的工具,只需要創建一個模型,做什麼,然後在每個控制器可以只加載模型,然後調用該函數。這就是模型的目的是被重用。

而且 - 你可以通過第三個參數設置爲true,返回一個視圖作爲變量。看到這個頁面的最下方:http://codeigniter.com/user_guide/general/views.html

示例控制器方法:

public function method() 
{ 
    $this->load->model('myModel'); 
    $var = $this->myModel->modelMethod(); 

    if($var == true) { 
     $data['sectionOne'] = $this->load->view('myView', '', true); 
    } 

    $this->load->view('layout', $data); 

} 
+0

是的,我用的幫手所有的時間,但我不加載在其中的視圖。澄清。我想爲用戶操作加載5個不同的html表單(如編輯/刪除/禁止等)。所以我需要檢查它是否應該加載和什麼樣的形式。然後我需要加載適當的HTML表單(視圖)。所以最後,它將是模型中的$ this-> load-> view('user_delete_form')。而且我知道這應該在Controller中完成。這就是爲什麼我有點困惑,我不知道是否有更好的方式來做到這一點。 – user1245750 2012-03-02 19:04:29

+0

看我編輯的答案,看看是否有助於回答你的問題。 – Catfish 2012-03-02 19:09:22

+0

這不完全是我想要實現的,因爲這樣我就不得不調用模型,檢查結果,然後加載視圖。該代碼塊將在控制器上執行很多次);理想情況是將該代碼放到一個函數中(如模型中),然後調用它。但是這樣我就可以在模型中使用'load-> view()'。我不知道是否有可能需要檢查。我的意思是,我可以在視圖中創建切換,並基於第二個參數來加載顯示我需要的視圖。即使我不能用一行代碼來做(檢查,加載需要的視圖)3行比20好得多 – user1245750 2012-03-02 19:31:34