2010-11-30 136 views

回答

0

在MVC不可知論的方法中,我會說回到模型的視圖是correct approach。純粹主義者可能會說總是回到控制器。

here ...註釋

模型管理的行爲和應用領域的 數據, 響應有關其狀態(通常是從 視圖)的信息 請求和響應通過 更改狀態(通常來自 控制器)。

短語「通常」是關鍵。模式在一定程度上用於可管理性和可維護性。有時模式是以可維護和可管理的方式完成目標的障礙,有時會被過度使用。

我會認識到,在這種情況下(小規模),任何一條路線都可以正常工作......但它也是關於如何在廣泛的應用中解決問題。

+0

所以我會從視圖調用模型? – roger 2010-11-30 21:35:58

1

在CodeIgniter視圖中從控制器獲取它們的數據,該控制器解複用/驗證參數並從模型中檢索合適的數據。重要的是:

  1. 視圖被輸出。視圖不直接與模型耦合,因爲它們定義了HTML/XML/JSON/CSS(頁面,頁面的邏輯部分或輸出數據的其他片段,如API和資源)。這意味着你不要從CI中的視圖調用模型。

  2. 控制器是代理。控制器和模型不產生輸出。控制器接受GET和POST請求併爲視圖打印結果所需的調用,通常檢查參數並複用多個模型調用以獲取所有適當的數據。

  3. 模型獲取和放入數據。模型應以不可知的格式返回其數據:作爲模型的數據對象,或更一般(但一致)的數據散列。返回的模型數據越清晰,您將在視圖和模型之間發現的耦合越少(並且您將能夠重複使用模型片段的次數越多)。

CI中有幾個地方,你可能會發現重疊:

  • 的JavaScript往往結束了相關的意見(和可能做這樣的事情的驗證,通常的控制任務)。您可以通過將Javascript移出視圖來改善這種情況(適用於較大的部分,對於較小的部分不太適用)。
  • 在PHP中,返回哈希(鍵/值數組)比返回對象(代碼少,但是類型安全性降低)更容易。這通常是耦合的來源。
  • 共享輸出的東西通常會進入控制器(您可以通過將它移動到CI幫助程序庫中避免這種情況)。

目標是讓您的視圖不知道您的模型,只是它們從它們接收符合特定規範的數據。控制器只是獲取和放置(它們既不生成HTML輸出,也不直接訪問數據),模型主要是SQL或其他形式的獲取數據並將其填充到結構化的東西中。

0

是的,您將表單數據提交給控制器功能。該函數然後處理數據並調用視圖。

如果您嘗試任何其他方式,您將以代碼地獄結束。

一個函數可以處理表單的原始顯示和表單的提交。

只需檢查表單是否已提交,如果是,處理它的數據,否則顯示錶單。

function login(){ 

    if($this->input->post('submitted')==1){ 

    //process the form data 

    }else{ 

    //show the form 

    } 

} 
相關問題