2011-07-13 80 views
2

主要的應用程序,我需要創建一個網站是這樣的:CakePHP的意見與幾個子應用

  • 首頁頁面與大家公開訪問。
  • 這個主頁包括一個登錄/註冊部分,並鏈接到幾個minisites(量將開始很小,但增長將隨着時間的推移)
  • 的minisites將具有相同的標題(標識/菜單)和頁腳(接觸,隱私政策)作爲主頁。什麼會改變的主要內容是
  • 要訪問任何的迷你網站,用戶胸圍在

登錄聽起來並不很複雜吧?這是我現在正在考慮的方式(這顯然我不知道這是最好的方式,這就是爲什麼我尋求建議):

  • 一個CakePHP的應用與全球autentication系統(使用驗證)
  • 每個迷你網站都只是網站的不同頁面,具有自己的控制器和視圖(如果需要,還有模型)。
  • 所以會有www.mysite.com/mini-site1,www.mysite.com/mini-site2等

我對這個系統的主要問題是2:

  • 什麼如果迷你網站的數量增長很多?會有很多控制器,查看文件夾,模型以及誰知道佈局,元素等等......也許不是最好的組織
  • 如果迷你網站變得更復雜會怎樣?更多的表格,控制器,腳本,css ...

也許我擔心太多,我的擔憂不是這樣的問題,但我想知道是否有人有任何建議的替代配置。例如,有一個主頁(cakephp應用程序),它將成爲主頁,並且每個迷你網站都是一個子應用程序(也在cakephp中),其訪問權將由主應用程序控制。這樣,它就會更加有組織,每個小型站點都有自己的控制器,視圖,模型或任何需要的不同文件夾,並且可以根據需要進行復雜操作。我甚至不知道這是否可行,或者服務器和文件夾配置看起來如何。我有一些CakePHP的經驗,但沒有那麼多。

任何想法/建議將不勝感激!

回答

1

如果你是真正的構建多個應用程序,然後蛋糕有一個內置的「插件」架構,它允許你建立一個位於頂部的主應用層插件結構的內部獨立的應用程序。

我們有一個我們在這裏開發的具有管理所有的用戶數據,認證,ACL,並具有跨所有應用程序,包括通知,去了一些實用功能的主要應用層面的工作。

然後我們有插件作爲蛋糕叫他們如票務,文件共享和CMS。其中的每一個看起來像Cake應用程序都有自己的視圖,控制器和模型,並且位於app => plugins目錄下的目錄中。

它運作良好,但需要相當大的規劃,以確保你不要造成不必要的應用程序或擱淺代碼鳥巢。

更多關於此插件: http://book.cakephp.org/view/1111/Plugins

+0

非常感謝您的回答,看起來非常有趣。所以基本上你說我應該創建每個迷你網站作爲插件,對吧?如果這樣做,訪問插件是否可以由Auth組件控制?就像它們是頁面一樣...... – Albert

+0

是的,所以如果你有一個購票插件,它會在app => plugins =>票務文件夾中擁有自己的app_controller和app_model,如鏈接所說的。但我無法強調足以確定您正在構建真正的獨立應用程序。如果你可以在正常的MVC模型中做到這一點,你應該朝這個方向發展,除非分離結構合理。 – Matt

1

我有幾個CakePHP的應用和我的選擇是對每個網站的應用程序,並分享蛋糕來源。插件是用來創建功能和可重用功能的一種方式。他們保持主代碼庫輕量級,我同意這有所幫助。它們不會幫助您自定義應用程序的路由或配置。

當我第一次爲我的項目研究這個項目時,我探討了使用插件作爲選項,但看到缺乏對核心配置和路由的標準控制作爲一個痛點。如果您有多個站點,則在此環境中訪問數據庫或任何數據源可能會變得乏味。特別是如果每​​個站點都有自己的數據源,路由和配置。

我看到它背離「CakePHP方式」的任何偏離並不理想,它是如何從一個應用程序代碼庫運行多個站點有多複雜?

挑戰

  1. 是否所有的路線相同,或者做一些網站需要不同的規則。
  2. 您的功能是否與所有網站相同,或者是否存在一些可能導致您破解核心代碼的差異。

在任何配置想象這樣或app_controller.php

if($domain == 'first.example.com'): 
#This is the first time I override this value, is it the last? 
endif; 

沒有在現場結束了,我發現我的開發時間花在尋找這個抽象聰明的方法。不是我渴望的核心功能。

爲了防止諺語鳥巢,我選擇爲每個網站創建一個單一的應用程序目錄。我這樣做的主要原因是爲了防止代碼庫中發生上述混亂。我運行多個應用程序源代碼,但使用bash腳本和源代碼控制,與想到在1個應用程序中抽象所有這些內容的巧妙方法相比,這非常簡單。

爲什麼

你的網站變得更容易測試和管理。它有助於每個站點都擁有自己的緩存和日誌位置,因此如果發生某種情況,您的調試時間會更加集中。你甚至可以在所有網站上共享你的插件目錄。它更容易,因爲管理多個環境的複雜性需要處理。

雖然它可能被認爲是次優的每個站點都有一個代碼庫。我相信這是實用主義進程的一部分。您決定什麼適合您,我知道有一些人使用單一解決方案來談論成功。這是你的選擇。

如果你決定走每個網站有1個應用程序的路線。這與我的文件夾結構

/var/www/cakehost/first.example.com/current #Symlink that points to the latest revision. 
/var/www/cakehost/second.example.com/current #Symlink that points to the latest revision. 
/var/www/cakehost/third.example.com/current #Symlink that points to the latest revision. 
/var/www/cakehost/src/cake 

一旦你決定出口1個應用爲你只需使用的bootstrap.php文件,它的目的的方式每個站點。

我使用腳本從我的源代碼控制中導出樣板「app」。該應用程序可在所有環境中運行,且無需黑客入侵。任何偏差都來自bootstrap.php文件。爲了簡化這一點,您可以從所有網站創建一個插件目錄和符號鏈接。

/var/www/cakehost/plugins/ #Symlink source for each app. 

即使看起來像不必要的重複,我的代碼仍然保持整潔,並且測試很容易。我嘗試使用1個應用程序的所有插件它並不是非常正確。