2009-12-02 71 views
1

問題很簡單。我應該在mvc設計模式(Zend,Symphony,Cakephp,Codeigniter)中將表單驗證過程放在哪裏。我問這個問題,因爲我有我自己的框架。但我不能決定我應該在哪裏處理表單驗證。例如,我可以在控制器中編寫if語句,但這會使控制器變得「胖」,或者我可以在模型函數中添加驗證語句(在User :: register(,,)中)。當然,這不是很複雜的事情,但我的目標是理解他們在企業級應用程序中的表現。哪裏是驗證表單數據的最佳位置?

+0

類似的問題在這裏http://stackoverflow.com/questions/223097/where-do-you-record-validation-rules-for-form-data-in-a-web-application – blank

+0

非常不同的問題... –

回答

2

如果考慮MVC中的模型作爲我們在.NET世界呼叫的ViewModels(我相信被稱爲別處演示模型),而不是域模型,模型將添加驗證/認證的好地方。

這將允許你重用驗證邏輯,方便您隨時隨地重用模型,它是有道理的,因爲該模型將與數據一起封裝驗證邏輯。這聽起來像我的高凝聚力。

作爲一個全面的檢查,ASP.NET MVC框架似乎在這方向前進爲好。由於這個問題被標記爲'php',我不確定這最後一條信息是加強還是減弱了論點。

+0

濫用術語凝聚力? – paxos1977

+1

@ceretullis:我不這麼認爲,根據維基百科的定義:http://en.wikipedia.org/wiki/Cohesion_(computer_science) –

1

驗證是對輸入的控制。 MVC代表模型視圖控制器,因此驗證應該在控制器中。

一般驗證等isInt(),ISSTR(),isEmailAddress,isFloat()等等等等可以/應當放置在鹼控制器。然後,您可以爲指定的模型提供子控制器(映射到您的數據庫)。那些子控制器然後從基本控制器延伸。

+1

-1我想你混淆了控制和控制器的語義相似性暗示應該有一個結構上的等值。 –

0

有多個地方可以進行驗證。

首先,客戶端與服務器端:這是經常一個很好的做法,以做到在客戶端預驗證發送位了線之前(如「僅允許數字!」)。作爲安全/數據完整性要求,服務器端驗證始終是強制性的。

前端與模型要求:一個特定的表單可能不知道模型對相關數據對象的要求(例如,如果業務邏輯規則中某個字段的值不應爲3,則相關數目記錄小於5) - 唯一可以知道該模型的地方。

相關問題