2012-12-19 35 views
1

我有一個非常大的AppController。近75個函數和130千字節。這似乎會減慢我的系統。因此,我需要將這些函數放入另一個文件中,並在其他控制器需要時包含該文件。CakePHP創建組件或其他控制器

選項正在創建新的controller或新的component。我正在嘗試做出選擇。優點或缺點是什麼?

我的要點是:

  • 我不打算使用其他項目中這些功能。這些功能只會被這個項目使用。
  • 在我的AppController中,我使用這些文件,模型,組件。所以他們應該可以通過新的結構訪問。

    App::import('Vendor', 'MyFancyVendor', array('file' => 'MyFancyVendor.php')); 
    App::uses('CakeEmail', 'Network/Email'); 
    
    public $uses = array('Mytable1', 'Mytable2', 'Mytable3', 'Mytable4'); 
    public $components = array('Session'); 
    public $helpers = array('Session','Html'); 
    

編輯:雖然使用一個巨大的新的控制器/組件看起來與老結構相同,不同的是:說出來MyController12和MyController13不使用內部AppController的這些巨大功能的方法。但是由於MyController12是從AppController創建的,它會加載它不需要的模型,組件和其他東西。如果我將這些邏輯放在AppController之外,MyController12將不會加載所有的邏輯。

回答

3

遵循此模式:

  • 收集所有相關的功能在庫中。
  • 移動模型中的所有數據邏輯。
  • 移動INT的意見,所有的視圖邏輯(記住看法並不模板)
  • 對於其他任何左,創建一些助手

這會讓你的控制器更薄。考慮到你真的不想在任何其他項目或部分網站中使用這些功能,創建其他控制器應該是你的最後機會。

+0

關於MVC,你的想法是最好的。但是這似乎是一個非常大的重構工作。我打算在我的新CakePHP項目中使用這種模式。但是對於創建庫的這個項目來說,助手和添加模型函數會花費太多時間。雖然我不喜歡我會選擇控制器或組件的選項之一。我真的不打算在其他項目中使用這些方法。 – trante

+2

@trante,你要求最好的解決方案。最佳解決方案通常需要一些工作如果你只是不介意,然後將你的邏輯劃分在其他控制器中,並將它們包含進來。我最好的建議再次提出?打你懶惰:如果你足夠的關心,你會重構。 – Shoe

1

從我能讀到的,也許它最好的,你考慮將你的AppController分成多個不同的文件。沒有看到你的AppController,它似乎假設了很多不同的角色。

也許最好爲Mytable1,MyTable2,Mytable3,Mytable4使用不同的控制器,並使用組件在它們之間共享任何信息。

要回答你的問題,它是使用BOTH,也可以使用Libs和Helpers。必要時的控制器和必要的組件。將巨大的AppController變成一個巨大的組件沒有意義。在你看到共同點的地方分割你的文件。例如ImageController或Postcontroller,都會使用會話組件。

編輯:如何將$ helpers,$ components和$ uses從AppController更改爲Individual controllers?使用關係,以便CakePHP可以找到模型。並確保控制器不加載額外的模型/類,因爲我懷疑一個大的控制器會導致緩慢(除非它的代碼)

+0

謝謝。我編輯了這個問題。 – trante

2

函數的數量和文件的大小絕對不會影響時間代碼需要執行。

例如:this超過50插件加載,100個控制器,84k行代碼和頁面加載合理快速。

您需要查看正在運行的查詢。我懷疑您正在使用recursive設置爲12的查詢。您至少應該使用containable

另請看explain您的選擇。如果您正在使用mysql,請檢查您的引擎是否與您的引擎類似。

您還可以安裝debug kit,其中顯示了很多關於需要花費時間並且可以加速的內容。