2010-08-19 58 views
6

我們在PHP Symfony框架中開發了一款產品。我們現在有幾個客戶,我們正在維護不同的代碼庫和數據庫(MySql)。爲多個域名配置symfony項目

他們訪問使用子域名各自的代碼庫像client1.myproduct.com和client2.myproduct.com

現在,我們想使一個單一的代碼庫,客戶端和僅保留哪些是不同的文件(以它們都在不同的子域中。

所以兩個子域將指向相同的代碼庫,但將在需要時,即每當邏輯是用於兩個客戶端的一些特徵不同從它們各自的子域訪問文件。

任何人都可以提出什麼是去了解它的最好方法?

回答

4

網站:[foo.com,bar .co.uk,www.mike.es]

// index.php 
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); 

// get the domain 
$domain = $_SERVER['SERVER_NAME']; 

// get rid of www, com, es etc ... 
foreach(array('www.', '.com', '.es', '.co.uk') as $crap) { 
    $domain = str_replace($crap, '', $domain); 
} 
$confs = array(
    'foo' => 'somefoo', 
    'bar' => 'somebar', 
    'waz' => 'andwazconfig' 
); 
$cfg = (!empty($confs[$domain])) 
    ? $confs[$domain] 
    : 'default'; 

$configuration = ProjectConfiguration::getApplicationConfiguration($cfg, 'prod', false); 

sfContext::createInstance($configuration)->dispatch(); 

// End of index.php 

希望這有助於

+0

太好了,我也想用這樣CONFIGS和你剛纔證實,對我來說。我喜歡這種方法可以讓每個應用程序認爲它是唯一的,同時使其可以完全按照站點進行配置。 – Ryall 2014-12-23 15:11:39

0

我已經描述了在Symfony here中使用sfDomainRoutePlugin使用動態子域。

但是,你需要重寫很多現有的應用程序邏輯來支持多個客戶端在同一個應用程序,您還必須合併這兩個舊數據庫。

0

我請求相同的信息,並有權獲得mike's和fabien's回覆的機會。下面是詳細信息:

對於一個邏輯和子域:http://trac.symfony-project.org/wiki/HowToDoMultipleSitesWithSingleCore

多個站點基於相同的配置 這可能是一個陌生的話題,但我想配置我們接進子域,所有的SSL訪問。我們需要不同的網站,因爲SSL強制基於IP的虛擬域,這意味着我們有不同的文檔根。如:

•www.mydomain.com •admin.mydomain.com •parents.mydomain.com 然而,這些都是網站使用相同的核心架構和插件。這種結構的優點是:

•共享模型文件:所有XxxPeer類將在應用程序 缺點鏈接:

•您現在有2-N不同的緩存/日誌來監視。 如果你看看一個典型的Symfony的目錄結構,它可以分解兩個型羣體:

•通用目錄: ◦batch ◦config ◦data ◦doc ◦lib ◦plugins ◦test •應用程序特定的目錄: ◦apps ◦cache ◦log ◦web 下面是我所採取的步驟:

•發展的www.yourdomain.com SC hema和網站。一旦這一切開始結合在一起,您就可以開始開發其他網站。 •在新網站中,符號鏈接通用目錄 •在新網站中,創建應用程序特定目錄 注意:在Web目錄中,您可能需要複製一些原始內容(css,js和。 htaccess文件讓人想起)。當你開始建立新的網站時,請將它留在你的腦海裏。 •運行命令symfony fix-perms 注意:對我而言,Virtualmin使用新用戶名創建這些新站點。您必須確保所有應用程序特定目錄均由該用戶名擁有,因此您的clear-cache命令和日誌記錄命令可以工作。 •現在,您已經配置了項目。您首先做: ◦symfony應用程序MYAPP ◦symfony模塊MYAPP MYMODULE ◦... •您現在將發現已創建您的應用程序/ MYAPP/modules/MYMODULE,並且您可以完全訪問整個數據庫

這裏是關於一個邏輯與不同域名的fabien:client1.com client2.com使用相同的應用程序。

對於一個具有不同域的邏輯: 「您可以將它們全部指向同一個前端控制器,然後使用過濾器或操作父類來執行諸如更改站點模板等操作。但是,使用前端控制器每個域可以有更高的效率,並且是一個非常好的方式。

每個域都可以有自己的應用程序,但是大部分邏輯應該在插件中實現,因此可以爲每個域/應用程序啓用它們需要它們,並根據需要共享。每個應用程序需要多少代碼,我想,這些網站實際上有多不同。「