2013-06-25 17 views
0

我已經在整個互聯網上查找了一個答案,但是我找不到它,所以我會在這裏問。我在一些網站的形式和我不知道如何通過$ _ POST到我想到的一些選項在這裏,他們是模型:

方法1:

訪問直接從模型中$_POST我用這種方法看到的問題是,現在我的模型與我的觀點緊密相關,這使我的模型無法重用。

方法2:

創建$data數組,它包含該發佈信息,但再次,如果我有10+場在我的形式分配給所有這些變量是乏味做的,在模型中我必須知道我在控制器中命名的關鍵。

方法3:

傳遞每個$_POST鍵作爲一個參數模型的功能,但是這提出了一個類似的問題,方法2,如果我有10+領域中會有很多的參數,如果之後我想添加一個新參數,這是很多重寫的代碼。

我想知道其他php程序員如何做到這一點。

+0

我沒有在MVC太多的經驗,其實IM stargin,但據我所知,你不應該通過該發佈信息到控制器?並通過崗位所需的模型,你的模型應該很好腳本足以形成查詢,或者你可以做一個特定的模式擴展標準之一,即使它不能重複使用,有時會發生,而不是100%的代碼必須可重用 – aleation

+0

@aleation說的+1,控制器處理POST,做任何需要的事情(驗證,業務邏輯...)並填充模型。型號甚至不應該知道POST存在,它只是POPO(普通舊PHP對象) –

+0

我把驗證模型。 –

回答

0

該模型是一個。首先,您需要了解模型中發生了什麼,並且您可以閱讀關於該here的信息。

現在我們已經清除了,讓我們來解決您的問題。您希望將數據從視圖傳遞到模型圖層中的某種服務/數據映射器。這是處理相同的每隔一個請求

  • 執行請求您的應用程序
  • 路由句柄發送該請求到適當的控制器
  • 你可能有某種機制,只允許特定的控制器/方法的XMLHttpRequest。如果是這樣,在你的路由周圍你應該執行你的檢查。
  • 您的模型圖層(可能是驗證服務)驗證發佈數據並確保它是您的期望。在過去,我確保只有某些鍵/值存在於數組中。
  • 這個數據傳遞到服務模型,然後使用它,你認爲合適。

基本上,治療$_POST請求與任何其他要求,只是檢查(使用自己或框架內置的方法),它的請求類型和內容,您需要,然後用它作爲正常。


至於你的「許多領域」,和你擔心代碼的可重用性/不必重複自己,通過讓你使用一個循環從客戶端所需要的數據(可能該類使用JavaScript)。然後,如果您將來添加更多數據,循環會自動將其提取併發送給您。

想想你的模型,即多了幾分抽象的,它會能夠處理循環的輸入,而你的黃金。

0

不確定其他框架,但在Yii中,當您使用模型生成表單時,它使用模型名稱和表單元素名稱的屬性。例如,如果您有一個名爲User的模型,並且具有用戶名,名字和姓氏的屬性。它會創建如下形式:

<form> 
    <input type='text' name='User[username]' id='User_username'> 
    <input type='text' name='User[firstname]' id='User_firstname'> 
    <input type='text' name='User[lastname]' id='User_lastname'> 
    <input type='submit'> 
</form> 

這樣所有的值都存儲在一個數組中。然後,你可以簡單地說:

//DONE INSIDE CONTROLLER 
$user = new User(); 
$user->attributes = $_POST['User']; 
//or if you need to you can store individual values 
$user->username = $_POST['User']['username']; 

如果你沒有你的模型設置這種方式,你可以很容易地添加功能,你的模型,你可以發送$_POST['User']陣列和設置的值。

+0

-1:你的'User'實例正在泄漏封裝。 –

+0

@tereško所有我要說的是,這是Yii框架做它的方式。 OP問及其他框架如何處理郵政價值,這正是我給他的例子。 – Pitchinnate

+1

因爲我知道Yii有多可怕,所以舉一個例子來看,它似乎是一個非常糟糕的dea。 –

相關問題