2011-03-21 27 views
4

我是CodeIgniter的初學者,仍然很難完全掌握如何最乾淨地使用MVC思想。初學者CodeIgniter概念 - 可重用的視圖代碼,要去哪裏? (Helper?)

我正在寫一個基本的CMS系統,能夠對條目進行投票並跟隨其他人等等,因此,我發現我自己在多個視圖中使用相同或相似的代碼片斷,其中包含各種HTML和邏輯如:

  • 投票面板
  • 跟蹤/停止追隨面板
  • 登錄/註銷面板
  • 代碼檢查,如果用戶在登錄等...

我想知道在哪裏把這個代碼,所以它可以統一?我想助手是要走的路? 如果我在控制器中聲明助手,它可以從相應的視圖調用嗎?

某些元素是動態的 - 例如跟隨/取消關注按鈕 - 它需要檢查您是否已經跟蹤用戶並顯示相應的按鈕,這需要模型檢查。我現在擁有的是所有的邏輯都在控制器中,並且它返回一個合適的按鈕,但在控制器返回中返回形成的html代碼似乎很奇怪。它應該是更象:

  • 控制器檢查,如果你正在關注的人
  • 控制器傳遞一個布爾值到視圖
  • 視圖調用具有此值的助手繪製相應的按鈕

另外,作爲第二個問題,我一直在循環遍歷foreach循環中的mysql數組,以處理從視圖返回的mysql結果。似乎我的觀點有些複雜,但我想不出另一種方式去做,但也許這應該在另一個幫手中完成呢?

道歉,如果這是一個天真或重複的問題,圍繞這個問題確實有很多討論,但它並不總是容易相關的另一個項目。

+0

感謝您到目前爲止的答案 - 我正在做模型中的所有DB提取,但我在視圖中做了相當多的邏輯。例如。我讓控制器在結果中加載*條目*,然後將每個*條目的所有*票*加載到另一個結果中。然後,該視圖有一個嵌套的foreach循環來顯示每個條目,然後顯示該條目的相應投票,這是'好嗎'還是應該以另一種方式接近它? @ thrice801 - 我只是想知道爲什麼這個用戶提到在視圖中加載助手不是首選 - http://stackoverflow.com/questions/804399/codeigniter-create-new-helper – waffl 2011-03-22 01:08:45

回答

0

幫助者當然是一種模塊化不是DRY的東西。另一個是使用部分視圖。 CodeIgniter 看起來像喜歡它支持部分視圖。 Here's一個很好的細分 - 不是PHP的具體細節,但討論應該是不可知的。

0

就處理用戶登錄而言,您可能希望使用靜態類和單例設計模式,這將允許您檢查特定用戶是否已登錄或不在應用程序的任何位置。這裏有一個很好的教程 http://www.phpandstuff.com/articles/codeigniter-doctrine-scratch-day-4-user-login

加載助手,我不相信加載它的控制器會自動加載它在你的視圖。我認爲你必須重新加載你的視圖文件中的助手,或者你必須自動加載助手。 (不記得頂部的頭,但林肯定)。

關於通過mysql結果循環,你應該總是使用這個模型。任何從您的應用程序中獲取或分類信息的功能都應該在模型中完成。然後,在您的視圖文件中,循環查看結果並格式化數據。

0

在開發具有投票功能的http://newspapair.com時,您提到我使用助手和自定義類來將功能分佈到多個視圖中。

助手 - 沒有類的功能。所以一個獨立的函數或一組函數可以放在一個文件中並保存爲幫助程序。

例如,我爲NewsPapair使用了一個具有通用表單處理函數的幫助器,而不是靜態類。但這不是「最佳實踐」的事情。我這樣做是因爲我已經有了以前項目的功能。

至於循環訪問MySQL結果,請嘗試編寫一個查詢,以便數據庫服務器完成繁重的工作。這會讓你的代碼更有效率。也許用示例代碼問一個關於具體查詢的問題。另外做你的模型中的所有數據收集。