2013-06-05 136 views
5

我正在一個項目上工作,我很困惑,因爲把什麼代碼放在哪裏。 我會在這裏舉一個簡單的例子來說明爲什麼我有點困惑。CakePHP的組件VS VS Libs和shell

想象一下在cakephp應用程序中可以創建一個帳戶的幾個網頁 - 可以創建一個帳戶 - 與這個帳戶一起,需要調用模型和庫中的幾個其他功能(例如,壓縮某些東西,創建一個證書帳戶,...)。

看到,因爲它需要在多個地點進行,不會在型號相當屬於(+是相當長的一段代碼),最好的辦法就是用我以爲組件。

這隻要你後面的Web服務器的偉大工程,但如果我也希望有所有的殼牌可用的功能是什麼? - 那麼我不能使用組件,只能加載庫。

這是對所有的功能/ PHP代碼我能/要共享,以在兩個外殼如在控制器中可用的所有邏輯的情況。

這裏來的問題:) => 所以我所有的組件都需要libs嗎?在這些libs中加載模型/其他libs是否在體系結構上是正確的?那麼什麼是組件的使用呢? 'rm -rf'他們,只使用庫?

到目前爲止我已經使用的部件,所述的方法是把所有的可/需要被在它們的控制器之間共享的流程邏輯。 我不需要任何模型或者只是靜態函數的集合(例如操縱圖像)時使用的Libs。 這樣做是因爲我在使用Shell腳本時想要/需要訪問這些組件中的邏輯。

任何想法是在我的理解出錯的地方?

回答

4

你已經給出了所有的答案!

是的,組件可以在控制器之間共享功能。只有控制器。 因此,如果您需要模型或外殼中的功能,而不是錯誤放置的功能。

你應該把代碼,就是用我的外殼和控制器兩到模型層(如果它的模型/ DB相關)或庫(靜態/ calc的東西等)。 然後那些可以從雙方使用。

您可以在libs和vica中使用模型。只要小心不要造成太多依賴和循環關係。那些也很難測試/擴展/修改。

組件是做一些更AUTOMAGIC和控制器的具體經辦有用包一個快速和方便的控制器訪問那些LIB /模型的方法和也。 與僅包裝CakeSession類以在控制器中提供簡單會話訪問的SessionComponent類似。順便說一下:您也可以在使用任務的命令行環境中執行相同的便利包裝。那些都不是「炮彈的組件」。

+0

感謝您驗證我的初步想法! 不想將代碼放置在錯誤的位置,因爲它會阻礙我在以後的開發/擴展。 – Crazy