2014-11-24 142 views
0

我使用PHP工作,瞭解MVC的工作原理。有一件事我不確定MVC。在View中直接創建Model對象而不通過Controller傳遞它是一種很好的做法,因爲有時不需要在Controller中處理Model?這樣做有什麼不利嗎?MVC Patern,視圖中的模型

+3

我認爲你犯了一個錯誤......你需要正確地瞭解MVC。 [如何模型的結構應(http://stackoverflow.com/questions/5863870/how-should-a-model-be-structured-in-mvc/5864000#5864000) – IROEGBU 2014-11-24 09:37:43

+0

'因爲有時候沒有必要處理控制器中的模型「 - 儘管這可能是事實,但模型幾乎總是能夠改變它自己的狀態。視圖層不適合讓這種情況發生。 – thpl 2014-11-24 09:37:57

+0

您可能會從閱讀[這個答案]中受益(http://stackoverflow.com/a/16596704/727208) – 2014-11-24 11:45:36

回答

-2

view只顯示效果,所以new Model()必須去控制,後來被傳遞給查看。

-2

是 - 你的觀點不應該需要依靠模型保持相同。

說例如,您使用的模型具有->forename->surname屬性。在你看來,你可以直接調用它們。

然後,您稍後決定要爲模型添加增變器和訪問器(獲取器和設置器),因此您將使用->getForename()->getSurname(),因爲您要對它們執行一些預處理以確保大寫是正確的。

現在您需要瀏覽所有控制器的視圖,因爲使用情況需要更改。

如果您想而不只是做了所有的模型處理您的控制器,然後通過一套標準化的數據的視圖,你只需要更新您的控制器。

的視角不應該期望模型的話,它應該只是要求它從控制器獲取特定數據。

你可以做這樣的事情在你的控制器:

$view = new View('my.file', [ 
    'user' => [ 
     'forename' => $user->forename, 
     'surname' => $user->surname, 
    ], 
]); 

這仍然給你一個$user['forename']在視圖中使用,但現在數據的格式是由控制器,而不是型號來了。針對MVC

概念

+0

很好的答案。人們不明白MVC的最大好處是可擴展性。毀了那個,你可能不會使用這個模式。 – Alternatex 2014-11-24 10:54:37

+0

「模型」不是一個對象。因此,你的答案的前提是錯誤的。最終結果是控制器中泄露的域邏輯。另外,「觀點」不是一個曇花一現。 – 2014-11-24 11:40:35

+0

@tereško我從來沒有在我的回答中提到「對象」或「模板」這幾個字。我使用了對象語法來演示如何訪問模型中的數據**作爲示例**,但我真的不理解您的評論,並且贊成 – Joe 2014-11-24 11:44:59

-1

它不要試圖打破建築

模式 - 這是負責維護數據模式的最低水平。

查看 - 這是負責顯示全部或部分數據給用戶。

控制器 - 控制模型和視圖之間的交互軟件代碼。

enter image description here

參考Here