2012-06-28 54 views
1

親愛的朋友們:這似乎更像是一個概念問題,而不是一個編程問題。對MVC來說是新手,並且在理解可以稱之爲什麼的問題上存在問題。程序控制的流程。由兩個不同的控制器調用的一個視圖(包含在視圖中的一個窗體調用另一個控制器)

問題:控制器A - 呼叫 - >模型A - 調用 - >視圖A.現在一旦視圖A被加載,它也包含一個表單,用於插入註釋並帶有一個sumbitt按鈕。

一旦註釋被插入(並提交),它會調用控制器B - 調用 - > Mocel B.它將數據插入註釋表中 - 進一步它沒有視圖調用。

問題1:如何從模型B調用控制器A(因爲模型B沒有視圖)。可以從ModelB加載ViewA,但需要重寫已存在於Controller a中的代碼。更進一步,我希望將評論表單插入到許多頁面中,因此我需要手動重新加載所有這些頁面(視圖)。

問題2:可以使控制器A和模型A的評論表單(控制器B和模型B)成爲可能,但評論表單將不再是可重用的模塊,並且需要插入每個頁面中我喜歡它被用於。

問題3:是否有一些概念錯誤我做出。這是MCV的工作方式?

摘要::有一種由控制器B和模式B管理的表單(它沒有視圖,它作爲由控制器A,模型A和視圖A管理的頁面的一部分顯示)模型Bafter執行它的工作需要調用控制器A(以便它可以刷新頁面)如何? 謝謝你勇敢的靈魂在ADVANCE

+0

來自模型層的結構(是的,在適當的MVC啓發式架構中,模型不是類)應該永遠不會有任何其他應用程序的知識。模型不應該調用控制器。 **決不!**。我認爲你的問題的核心是,當你試圖理解MVC時,你使用的是CodeIgniter的MVC模式的藍圖。但CodeIgniter的MVC實現是完全錯誤的。 –

回答

0

我覺得你的戰略是一個小關開始

控制器A --Calls - > A型 - 電話 - >查看一個

你的模型真的不應該叫你的看法。控制器通常負責這一點。向控制器發出請求,控制器獲取模型中的所有數據,然後使用視圖對其進行格式化/模板化,並將其輸出給用戶。控制器應該處於每個請求的中心。

問題1如何從模型B調用控制器A?

模型B真的不應該調用控制器。 MVC真的不是這樣的設計師。如果您需要從模型B獲取來自控制器的數據。如果您需要控制器A中存在的功能,則將其重構爲可用於應用程序中任何位置的實用程序功能。

問題2:可以使控制器A的註釋表單(控制器B和 模型B)成爲控制器A的一部分?

是的,這又來自一個好的應用程序設計。我會想象你的一個模型能夠檢索評論。也許每個用戶可能在每個時間段。從控制器A,您可以調用該模型功能。加載模型$this->load->model('Post') 並退出您的帖子$this->Post->most_recent_posts()

問題3:有一些概念上的錯誤我的決策。這是MCV工作的方式 ?

是的,您的站點的功能與其控制器和模型綁定太緊密。它們必須更加寬鬆/一般,因此可以在任何控制器中使用這些功能。

我想回答你最後一點/主要觀點,但它確實會幫助你查看一些代碼。

+0

哦,該死的......這是簡單SOOOO .. 只是在我的模型完成的工作....我可以 重定向(「/ controllerA控制器A /方法」,「刷新」); 這隻會刷新頁面。它在一些論壇中被稱爲**內部重定向**。 還記得redirect()是URI助手類的功能,因此要麼自動加載或手動加載它。 謝謝很多朋友特別是dm03514 –

+0

MR dm03514這樣一個更好的答案非常感謝..第1點::這就是我已經做的模型 - 報告 - 控制器,然後 - 控制器調用 - -view(但我沒有寫出來)Point2 ::完成其計算後的模型B可以通過重定向()來將控制權移交給控制器A,如下所述...非常感謝 –

相關問題